关于正则表达式的语法问题
(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'
------解决方案--------------------(?:)有分组,但不能被引用,也不会当集合输出
------解决方案--------------------捕获到组里的话会消耗一定的资源
但有时候希望用小括号括起来来表示优先级之类的意思 但又不希望因此而捕获消耗资源
所以有了(?:)
大概是这样的