如何" It's big \"problem "使用正则表达式获取子字符串?
s = ' function(){ return " It\'s big \"problem "; }';
Run Code Online (Sandbox Code Playgroud) <table((?!</table>).)*</table>
Run Code Online (Sandbox Code Playgroud)
但是,匹配我的所有表格标签
<table(.(?!</table>))*</table>
Run Code Online (Sandbox Code Playgroud)
才不是.第二个似乎是有意义的,如果我试图用文字写出表达,但我无法理解第一个.
有人可以向我解释一下这个区别吗?
作为参考,我从这里得到了"Tempered Greedy Token"这个术语:http://www.rexegg.com/regex-quantifiers.html#tempered_greed
要求:两个表达式,exp1和exp2,我们需要匹配两者中的一个或多个。所以我想出了,
(exp1 | exp2)*
Run Code Online (Sandbox Code Playgroud)
但是在某些地方,我看到以下正在使用,
(exp1 * (exp2 exp1*)*)
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?你什么时候会使用一个?
希望小提琴能让这更清楚,
var regex1 = /^"([\x00-!#-[\]-\x7f]|\\")*"$/;
var regex2 = /^"([\x00-!#-[\]-\x7f]*(\\"[\x00-!#-[\]-\x7f]*)*)"$/;
var str = '"foo \\"bar\\" baz"';
var r1 = regex1.exec(str);
var r2 = regex2.exec(str);
Run Code Online (Sandbox Code Playgroud)
编辑:当我们捕获组时,这两个方法之间的行为似乎有所不同。第二种方法捕获整个字符串,而第一种方法仅捕获最后一个匹配组。请参阅更新的小提琴。