我要做的是提取匹配模式,但其中一种模式可能是可选的。我们直接上例子。
我要匹配的目标文本是,
<foo>\n<bar>\n#####<foo>\n#####<bar>
我的正则表达式是,
/(#{5})?/
(我在这里使用 ? 的原因是因为特定的模式可能是可选的。例如,我不希望匹配完全错过,而不仅仅是这个模式的“未定义”。)
我期望 str.match() 返回的是,
[ '#####',
'#####',
index: 12,
input: '<foo>\n<bar>\n#####<foo>\n#####<bar>' ]
但实际上是,
[ '',
undefined,
index: 0,
input: '<foo>\n<bar>\n#####<foo>\n#####<bar>' ]
如果我改用以下模式,它会正常工作。
/(#{5})+/
为什么?
我在 nodejs/chrome 和 IE 中都试过这个,但都没有工作,这意味着这种行为在 JS 引擎中是一致的。但它的行为方式与我尝试过的许多工具之一regexpal 不同。我不确定这是工具本身的问题还是只是不同的实现。