如何用Javascript';什么是regex?

如何用Javascript';什么是regex?,javascript,regex,regex-group,quantifiers,Javascript,Regex,Regex Group,Quantifiers,假设我有一个字符串“QQxaxbxcQQ”,我想捕获后面跟任意字符的所有x组。我也只想在QQ之间搜索(字符串中可能包含其他内容)。我以为这会奏效: var matches = str.match(/QQ(x\w)+QQ/) 然而,这似乎只是回到我的最后一场比赛(xc)。你能给我指一下正确的方向吗 编辑:我的问题的第一个版本过于简单化了。向最初的回应者道歉。编辑以使其更接近我的实际问题。如果要捕获所有组,请使用以下命令: var matches = str.match(/(x\w)/g) 输出

假设我有一个字符串“QQxaxbxcQQ”,我想捕获后面跟任意字符的所有x组。我也只想在QQ之间搜索(字符串中可能包含其他内容)。我以为这会奏效:

var matches = str.match(/QQ(x\w)+QQ/)
然而,这似乎只是回到我的最后一场比赛(xc)。你能给我指一下正确的方向吗


编辑:我的问题的第一个版本过于简单化了。向最初的回应者道歉。编辑以使其更接近我的实际问题。

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

var matches = str.match(/(x\w)/g)
输出:

["xa", "xb", "xc"]
我做了两个改变:

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


编辑:如果您希望仅在QQ和QQ之间获得匹配,您可以执行以下操作:

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

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

因为OP改变了问题。现在它是的一个副本。

也许您想要将重复包装在捕获组中(捕获连接在一起的
x\w
的所有实例):


这将返回
“xaxbxc”
,因为
匹配[1]

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

编辑:

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

'qqxaxbqxcqq'。匹配(/x\w/g)
产生
['xa',xb',xc']

匹配(/((?:x\w)+/)产生
['xaxb','xaxb']

编辑2:

如果您只希望在
QQ
s之间搜索,则
拆分
应该是最快的方法。 (下划线在这里帮助很大。)


产生['xa',xb',xc']

您只需要在正则表达式的末尾添加
g
参数
g
标志返回一个包含所有匹配项的数组,在我们的例子中,所有backreference的匹配项
(x\w)

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

var matches = str.match(/QQ(x\w)+QQ/g)
匹配是一个数组


看看这个:

对不起,我意识到我把问题简化了。我编辑了它,你能再看一眼吗?@user200814我不知道为什么我的答案不适合你。它不会给你想要的吗?告诉我,它会返回什么?它是一个数组。顺便说一句,您的问题在我更新之前到达:)
var matches = str.match(/QQ((x\w)+)QQ/)
_.chain('xyQQxaxbQQxcQQxr'.split('QQ'))
.slice(1, -1)
.map(function (string) {
    return string.match(/x\w/g);
})
.flatten()
.compact()
.value()
var matches = str.match(/QQ(x\w)+QQ/g)