1 (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配 。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
既然是匹配'industry|industries' 那我'industr(y|ies)'不是更简单
这里指的非获取匹配是值 比如
var val = "1234215";
var reg = /3(?:4\d{3})/;
匹配不到值吗
可我 alert(val.match(reg)[0])依然是有值的啊
2 "?" 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
既然是非贪婪的 那为什么还要加问号呢 我直接写o{1}不就行了?
上面几点求解
既然是匹配'industry|industries' 那我'industr(y|ies)'不是更简单
这里指的非获取匹配是值 比如
var val = "1234215";
var reg = /3(?:4\d{3})/;
匹配不到值吗
可我 alert(val.match(reg)[0])依然是有值的啊
2 "?" 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
既然是非贪婪的 那为什么还要加问号呢 我直接写o{1}不就行了?
上面几点求解
"非获取"匹配 与 非"获取"匹配的区别
alert(val.match(reg)[0])依然是有值的 当然有值
下个问题其实只是两种不同的写法而已 这个就更不需要纠结了
var val = "1234215";
var reg = /3(?:4\d{3})/g;
alert(reg.exec(val)[1])
========================================
var val = "1234215";
var reg = /3(4\d{3})/g;
alert(reg.exec(val)[1])
这两个你试下就知道了2:你举的例子不恰当
var val = "<div>aaa<div>bbb</div>ccc</div>";
var reg = /<div>.*?<\/div>/g;
alert(val.match(reg)[0])
=============================================
var val = "<div>aaa<div>bbb</div>ccc</div>";
var reg = /<div>.*<\/div>/g;
alert(val.match(reg)[0])
同样的你试下这两个就知道差别了。
不能单看/3,要结合最后的那个/, 两个/之间的内容表示javascript的一个正则
也就是3(?:4\d{3})是一个正则,前后分别加上/,表示正则的开始和结束