Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
294 views
in Technique[技术] by (71.8m points)

正则表达式的非捕获括号

var rquickExpr = /^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/;
rquickExpr.exec('#one');// ["#one", undefined, "one", index: 0, input: "#one"]

这里为什么第一个元素是#one,不是用了非捕获括号了么?
如果我去掉这个非捕获括号,得到的结果完全一样啊,所以它有什么用?

var rquickExpr2 = /^s*(<[wW]+>)[^>]*|#([w-]*)$/;
rquickExpr2.exec('#one');// ["#one", undefined, "one", index: 0, input: "#one"]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

正则exec()之后,返回的数组,第一个元素是你的整个匹配,也就是arr[0],arr[1]才是你第一个子式匹配的,从你结果看是undefined,没匹配到,而你的非捕获的也确实没有捕获,因为你用了三次括号,但是只返会了两个子式匹配。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...