日期:2014-05-16  浏览次数:20331 次

关于正则表达式的语法问题
(exp) 匹配exp,并捕获文本到自动命名的组里 
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) 
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号 

(exp)与(?:exp)区别在哪里?

捕获匹配的文本(什么意思?)

给此分组分配组号(什么意思?)

自动命名的组里是什么意思?


(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
依然不理解。

能不能用实例代码讲解一下?

------解决方案--------------------
1、(exp)与(?:exp)区别——你上面已经说了啊,前者是捕获符合括号里面规则的匹配子字符串,后者是不捕获。
2、给此分组分配组号的意思——如果你的正则表达式中有多个括号括起来的,则生成出来的匹配子字符串是个数组,这样就有组号。
3、自动命名的组——就是匹配出来的子字符串的组号,从1开始:1,2,3...
4、关于正则表达式如何操作获取匹配出来的子字符串,你看下面的JS代码:

var s1 = "{'item_get_response':{'item':{'props':'20418023:157305307;1632501:269068813'}}}";
var p1 = /\{'props':(.*?')\}/;
function chkRegpt(str, pattn){
//根据正则表达式提取内容
  var rst = str.match(pattn);
  if(rst != null){
    return rst[1];
  }else{
    return "...";
  }
}
var tt = chkRegpt(s1,p1);
alert(tt);

,输出结果:'20418023:157305307;1632501:269068813'
------解决方案--------------------
(?:)有分组,但不能被引用,也不会当集合输出
------解决方案--------------------
捕获到组里的话会消耗一定的资源
但有时候希望用小括号括起来来表示优先级之类的意思  但又不希望因此而捕获消耗资源
所以有了(?:)
大概是这样的