Javascript 什么';这个正则表达式有什么问题:/(?:(?:^|\s)隐藏([^\s]+;)+;/?

Javascript 什么';这个正则表达式有什么问题:/(?:(?:^|\s)隐藏([^\s]+;)+;/?,javascript,regex,Javascript,Regex,这是我的正则表达式: /(?:(?:^|\s)hide_([^\s]+))+/ 例如,当我有以下字符串时: hide_test sgadsg hide_ asdg hide_some_more asdgasd 它应该匹配测试和更多的测试。目前,它返回hide\u test和test。有人知道这个正则表达式有什么问题吗?如果没有g标志,它只返回第一个匹配项 'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match( /(?:

这是我的正则表达式:

/(?:(?:^|\s)hide_([^\s]+))+/
例如,当我有以下字符串时:

 hide_test sgadsg hide_ asdg hide_some_more asdgasd

它应该匹配
测试
更多的测试
。目前,它返回
hide\u test
test
。有人知道这个正则表达式有什么问题吗?

如果没有
g
标志,它只返回第一个匹配项

'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match(
    /(?:(?:^|\s)hide_([^\s]+))+/
)
// => ["hide_test", "test"]
设置
g
标志将为您提供所有匹配项(所有匹配的字符串):

要仅获取
隐藏
之后的部分,需要对返回值进行后期处理

例如,使用带有附加替换的
map

'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match(
    /(?:(?:^|\s)hide_([^\s]+))+/g
).map(function(match) {
    return match.replace(/^\s*hide_/, '');
})

顺便说一句,正则表达式可以简化为:
/(\bhide\S+)+/g
(忽略捕获)

如果没有
g
标志,它只返回第一个匹配

'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match(
    /(?:(?:^|\s)hide_([^\s]+))+/
)
// => ["hide_test", "test"]
设置
g
标志将为您提供所有匹配项(所有匹配的字符串):

要仅获取
隐藏
之后的部分,需要对返回值进行后期处理

例如,使用带有附加替换的
map

'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match(
    /(?:(?:^|\s)hide_([^\s]+))+/g
).map(function(match) {
    return match.replace(/^\s*hide_/, '');
})

顺便说一句,正则表达式可以简化为:
/(\bhide\S+)+/g
(忽略捕获)

如果您希望输出
测试
更多
,则需要使用
.exec
和循环:

var regex = /(?:\bhide_(\S+))+/g;
var s = 'hide_test sgadsg hide_ asdg hide_some_more asdgasd';
var match, matches=[];

while ( (match=regex.exec(s)) !== null ) {
    matches.push(match[1]);
}

alert(matches);

我还稍微修改了正则表达式以简化它。

如果您想要输出
测试
更多的
,您需要使用
.exec
和一个循环:

var regex = /(?:\bhide_(\S+))+/g;
var s = 'hide_test sgadsg hide_ asdg hide_some_more asdgasd';
var match, matches=[];

while ( (match=regex.exec(s)) !== null ) {
    matches.push(match[1]);
}

alert(matches);

我还对您的正则表达式做了一些修改以简化它。

谢谢!“我怎么能让它只返回隐藏之后的东西?”乔南,我在回答中补充了这一部分。看看,谢谢!“我怎么能让它只返回隐藏之后的东西?”乔南,我在回答中补充了这一部分。过来看。