javascript正则表达式与g标志匹配,但不与y标志匹配

时间:2018-04-17 16:14:32

标签: javascript node.js regex

我无法理解为什么这会回归真实

let str = '\\[\\]\\(\\)\\{\\}\\<\\>';

let reg = new RegExp(/\(/g);
reg.test(str);

尚未

let str = '\\[\\]\\(\\)\\{\\}\\<\\>';

let reg = new RegExp(/\(/y);
reg.test(str);

返回false。

将全局标志添加到粘性标记也没有帮助。

2 个答案:

答案 0 :(得分:1)

Adding the global flag to the sticky flag doesn't help either.
  

定义为sticky和global的正则表达式忽略   全球旗帜。

     

“y”标志表示它仅与指示的索引匹配   由lastIndex

您必须设置正则表达式的lastIndex属性,默认为0,并且该索引处没有(,这就是没有匹配的原因。 (出现在索引5处。

let str = '\\[\\]\\(\\)\\{\\}\\<\\>';

let reg = /\(/y; // No need for new RegExp

reg.lastIndex = str.indexOf('('); // 5
reg.test(str); // True

有关粘性标记here的更多信息:

答案 1 :(得分:1)

粘性标记y在位置0处开始匹配(从lastIndex属性读取)。 (中该位置没有留下str,因此您的第二场比赛尝试失败。

来自MDN的粘性标记:

  

仅匹配由lastIndex属性指示的索引   目标字符串中的这个正则表达式(并不会尝试   来自任何后期索引的匹配)