javascript - 正则表达式开头与包含的理解
巴扎黑
巴扎黑 2017-04-11 11:27:02
[JavaScript讨论组]
/[^#].*/
/[^#]*/

这两个正则表达式的含义分别是“不以#开头”和“不包含#”

var Exp = /[^#].*/;
var result = Exp.excu("#id");
console.log(result[0]);

结果是预期的 id
换成第二个表达式后,结果是空字符串。
为什么??不也应该是id吗

巴扎黑
巴扎黑

全部回复(2)
阿神

*是代表0或者无穷个,估计你这里是非贪婪模式,所以匹配了0个

我刚试了下。。js既然是支持*?的,那这就很奇怪了。。莫非这个regex库有bug

PHP中文网

正好我遇过类似的问题,应该使用+:

/\d*/.exec("")
// [''];
/\d/.exec("")
// null
  • 匹配前面的子表达式任意次,包括0次。

  • 匹配前面的子表达式一次或多次(大于等于1次)。
    . 匹配除“rn”之外的任何单个字符。

   // /[^#]*/ 中 * 的作用于为 [^#]:

   /[^#]*/.exec("#id");
   /*
     //匹配0次,返回""
     [""]
   */
    /[^#]*/.exec("ha#id");
   /*
     ["ha"]
   */
   // /[^#].*/ 的 * 对应的表达式为 .

   /[^#].*/.exec("#id");
   /*
       //貌似解决了你的需求
       ["id"]
   */

   /[^#].*/.exec("ha#id");
   /*
       //BUG出现了
       ["ha#id"]
   */
   /[^#].*/.exec("#id#2");
   /*
       //BUG又出现了
       ["id#2"]
   */
   // 建议使用的代码:
   var result, code = "#id#3";
   if(result = /#([^#]+)/.exec(code) ){
       /*
           ["#id", "id"]
       */
       console.log(result[1]);
       /*
           id
       */
   }else{
       console.log("Error!");
   }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号