Javascript 替换功能不适用于正则表达式

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

为了测试这个正则表达式,我在这个 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);
}

最佳答案

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

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

Demo

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

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

关于Javascript 替换功能不适用于正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140691/

相关文章:

javascript - 如何手动触发点击事件?

javascript - 使用 JQuery 选择器选择元素的父元素

javascript - 防止基于页面上现有的另一个类的默认点击操作

c# - Regex.Replace 组重复输出?

Python:替换文件中的多个项目

java - 确定性有限自动机 - Java

javascript - 在非输入元素中捕获 "Selstart"、 "Sel..end"

javascript - Knockout - 访问嵌套 JSON 数据时遇到问题

javascript - 使用 AngularJS 服务共享数据

jquery - Opera 有时会忽略 jquery 函数,直到用户与页面交互之后