Javascript替换功能无法使用正则表达式

时间:2015-06-30 14:11:39

标签: javascript jquery regex string replace

我有以下字符串:

@[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+|@(?:\[[^\]]+\]\.?)+)

要测试这个正则表达式,我将在这个小提琴中用$替换这些子字符串: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);
}

2 个答案:

答案 0 :(得分:0)

如果您正在处理此类格式字符串,则以下正则表达式可以完成此任务:

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

Demo

如果括号的数量多于或少于3,您可以使用+

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

答案 1 :(得分:0)

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

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]