如何在 Javascript 的正则表达式中量化一个组?



假设我有一个字符串"QQxaxbxcQQ",我想捕获所有x组,后跟任何字符。 我也只想在QQ之间搜索(字符串中可能包含其他内容)。 我以为这会起作用:

var matches = str.match(/QQ(xw)+QQ/)

然而,这似乎只回到了最后一场比赛(xc)的我身上。 你能指出我正确的方向吗?

编辑:我的问题的第一个版本过于简单化。 向原始回复者道歉。 经过编辑以使其更接近我的实际问题。

+ 运算符很贪婪。 /(xw)+/ 应匹配整个字符串'xaxbxc',并且捕获组将包含与(xw)组件匹配的最终值。在这种情况下'xc'.如果您希望捕获每个连续的匹配项,则应改为/(xw)+/ /((?:xw)+)/。这会在序列周围移动捕获组,而不是在序列内部移动。(?: )表示非捕获组。

编辑:

如果要(xw)的每个实例,而不仅仅是连续的实例,请不要使用 + 运算符或捕获组。只需使用全局正则表达式:/xw/g .

'QQxaxbQQxcQQ'.match(/xw/g)产生['xa, 'xb', 'xc'] .

'QQxaxbQQxcQQ'.match(/((?:xw)+)/)产生['xaxb', 'xaxb'].

编辑2:

如果您只想在QQ之间搜索,split应该是最快的方法。(下划线在这里有很大帮助。

_.chain('xyQQxaxbQQxcQQxr'.split('QQ'))
.slice(1, -1)
.map(function (string) {
    return string.match(/xw/g);
})
.flatten()
.compact()
.value()

产生 ["xa"、"xb"、"xc"]

您只需要在正则表达式末尾添加g参数。 g标志返回一个包含所有匹配项的数组,在本例中为反向引用的所有匹配项(xw)

此处以粗体显示:/QQ(x\w)+QQ/g

var matches = str.match(/QQ(xw)+QQ/g)

匹配是一个数组

看看这个: http://jsfiddle.net/SZRSA/3/

'xaxbxc'.match(/xw/g);

返回

["xa", "xb", "xc"]

现在它是JavaScript正则表达式和子匹配的重复。

也许将

重复包装在捕获组中是您想要的(捕获连接在一起xw的所有实例):

var matches = str.match(/QQ((xw)+)QQ/)

这会将"xaxbxc"返回为matches[1]

如果要

捕获所有组,请使用以下命令:

var matches = str.match(/(xw)/g)

输出:

["xa", "xb", "xc"]

我做了两个更改:

  • 删除了+,因为您似乎希望每个 x 后跟一个字符
  • 添加了g修饰符以请求所有组

参考


编辑:如果你想要的是只在QQ和QQ之间时获得你的匹配,你可以这样做:

var matches = str.split('QQ').filter(function(v,i){return i%2})
    .join(' ').match(/(xw)/g)

相关内容

  • 没有找到相关文章

最新更新