JavaScript 正则表达式问题

标签 javascript regex

我正在尝试在 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/

相关文章:

javascript - 使用 Switch/Toggle Css/javascript 更改文本颜色

javascript - 如何按对象限制 Javascript 计数器变量的范围?

javascript - 正则表达式匹配表行有多行

iphone - 正则表达式从/* by AUTHOR 中提取作者 */

php - 正则表达式获取单引号和双引号之间的内容php

javascript - Promise 函数位于单独的文件中

javascript - 将一些对象键映射到对象中

javascript - 将 requireJS 模块暴露给全局命名空间的正确方法是什么?

javascript - 为什么我不能将函数直接传递给 replace 方法?

java - 在 word 中突出显示子字符串