Javascript Replace函数无法使用regex

Javascript Replace function not working with regex

本文关键字:regex Replace 函数 Javascript      更新时间:2023-09-26

我有以下字符串:

@[A:B:C].[X:Y:Z].[P:Q:R] 1.C.3.s @[1:2:3].[2:0:0].[5dsh:cxcv:wew]

我想从中提取以下格式的子字符串:

@[anything here].[anything here].[anything here]

在上述情况下,输出子字符串应为:

@[A:B:C].[X:Y:Z].[P:Q:R]
@[1:2:3].[2:0:0].[5dsh:cxcv:wew]

我有一个匹配这些子字符串的正则表达式:

(@'w+|@(?:'[[^']]+']'.?)+)

为了测试这个正则表达式,我将在这个fiddle中用$替换这些子字符串:http://jsfiddle.net/vfe50z0o/

正则表达式在Regex101演示中运行时没有问题:https://regex101.com/r/aH9nK5/1

但在JSFiddle上,它不起作用。

这是JavaScript代码:

function myFunction() {
    var re = /(@'w+|@(?:'[[^']]+']'.?)+)/; 
    var str = 'wewe@[s].[s].[s]xvcv';
    var subst = '$';
    var result = str.replace(re, subst);
    alert(result);
}

如果您正在处理这样的格式字符串,下面的regex可以完成这项工作:

(@?'[[^[]*']'.?){3}

演示

如果括号的数量可以大于或小于3,则可以使用+:

(@?'[[^[]*']'.?)+

您可以使用此代码获取匹配项:

var re = /(@'w*(?:'[[^']]+']'.?)+)/g; 
var str = '@[A:B:C].[X:Y:Z].[P:Q:R] 1.C.3.s @[1:2:3].[2:0:0].[5dsh:cxcv:wew]';
var m;
while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex)
        re.lastIndex++;
    console.log(m[1]);
}

输出:

@[A:B:C].[X:Y:Z].[P:Q:R]
@[1:2:3].[2:0:0].[5dsh:cxcv:wew]