我正在尝试在 javascript 正则表达式中使用这样的模式:
"foo.bar".match(/foo\.(buz|bar)/)
但它没有像我期望的那样返回 foo.bar,而是返回一个数组:
["foo.bar", "bar"]
我不明白。如何匹配 foo.bar 和 foo.buz?
最佳答案
您正确匹配“foo.bar”或“foo.buz”,但由于您有分组 ((...)
),因此返回的数组包含多个项目:
[Full Match, Match 1, Match 2, ... , Match N]
根据 the spec ,结果始终是一个数组,并且完全匹配的文本将是元素 0。元素 1...N 将是匹配项(在您的情况下为“bar”或“buz”)。
如果你想确保你的数组长度为1,那么你需要在每个 (
之后放置 ?:
以使其成为非捕获组(请参阅 https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions ,语法 (?:x)
):
"foo.bar".match(/foo\.(?:buz|bar)/)
但是,这不是必需的,因为您始终可以引用 result[0]
来获取完整匹配。
顺便说一句,/g
选项(再次参见the docs)也会从结果数组中删除捕获组。由于 /g
执行全局搜索,因此结果数组中的元素用于显示所有完全匹配(在给定的情况下,只有一个)。
关于JavaScript 正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6211336/