【发布时间】:2015-07-13 20:28:20
【问题描述】:
我有一个非常简单的正则表达式,
"lang-bash".match("lang-([a-z]+)", "gi")
在最新的 Chrome(43-ish)上,我得到了 ["lang-bash", "bash"] 的预期行为。当我在最新的 FireFox(39 或 41a)上尝试相同时,我得到 ["lang-bash"]。我也在 Safari (8.0.7) 中试过这个,它的预期结果是["lang-bash", "bash"]。
所以这可能是 FireFox 中的一个错误,我可以提交它,但我希望这只是我不理解的东西。谢谢!
编辑:好的……所以再做一些测试。
火狐
"lang-bash lang-dash".match(/lang-([a-z]+)/i)
Array [ "lang-bash", "bash" ]
"lang-bash lang-dash".match(/lang-([a-z]+)/ig)
Array [ "lang-bash", "lang-dash" ]
"lang-bash lang-dash".match("lang-([a-z]+)", "gi")
Array [ "lang-bash", "lang-dash" ]
野生动物园
"lang-bash lang-dash".match(/lang-([a-z]+)/i)
[ "lang-bash", "bash" ]
"lang-bash lang-dash".match(/lang-([a-z]+)/ig)
[ "lang-bash", "lang-dash" ]
"lang-bash lang-dash".match("lang-([a-z]+)", "gi")
["lang-bash", "bash"]
铬
"lang-bash".match(/lang\-([a-z]+)/i)
["lang-bash", "bash"]
"lang-bash".match(/lang\-([a-z]+)/gi)
["lang-bash"]
"lang-bash lang-dash".match("lang-([a-z]+)", "gi")
["lang-bash", "bash"]
由于有捕获,我希望任何带有 ig 标志的结果都是 [ "lang-bash", "lang-dash", "bash", "dash" ],但我想这根本不正确。似乎所有浏览器在这里的行为都不同。有人知道发生了什么吗?
【问题讨论】:
-
这看起来像是一个从第 0 组到第 1 组的捕获数组。您期待什么?在某些语言中,
match将匹配整个字符串,因此全局g选项毫无意义。也许您正在寻找搜索或查找。 -
g不应该没有意义,因为我的输入可能有多个值。只是我给出的例子没有。制作一个更有意义的输入字符串让我更加困惑。我真的只关心捕获。
标签: regex google-chrome firefox safari