仅使用否定先行匹配单个单词

时间:2019-03-10 07:19:58

标签: javascript regex

在Javascript中,我当前正在使用正则表达式:

/^(?!3838\s+REGATTA\s+COURT).*(COURT).*/

我想完全避免匹配:

  

3838 REGATTA法院

并匹配:(地址会有所不同)

  

5555 REGATTA法院

但是,我只想匹配单词“ COURT”,而不是整个字符串(这是我当前表达式返回的内容)。

此外,通过指定诸如^(?! 5555 \ s + REGATTA \ s + COURT)之类的表达式也无法删除5555 REGATTA COURT,因为地址会有所不同。我基本上需要避免将所有内容匹配到“ COURT”,然后再进行匹配。

2 个答案:

答案 0 :(得分:2)

这是使用正则表达式替换所有内容的一种方法:

var address = "5555 REGATTA COURT ";
var output = address.replace(/^(?!3838\s+REGATTA\s+COURT\b)(.*)\bCOURT\b(.*)/, "$1CT$2");
console.log(address);
console.log(output);

这里的逻辑是首先排除地址3838 REGATTA COURT。然后,匹配并捕获单词COURT两侧的所有内容。最后,在两个捕获组之间用CT替换。

我们还可以尝试使用回调函数执行此操作:

var address = "5555 REGATTA COURT ";
var output = address.replace(/^(?!3838\s+REGATTA\s+COURT\b)(.*)\bCOURT\b(.*)/, function(m, g1, g2) { return g1 + "CT" + g2; });
console.log(address);
console.log(output);

答案 1 :(得分:0)

如果您担心在替换字符串中使用$ 1 ... $ 9,只需查看MDN文档以了解标准化方式:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter。代码如下:

var address = "5555 REGATTA COURT ";
var output = address.replace(/^(?!3838\s+REGATTA\s+COURT\b)(.*)\bCOURT\b(.*)/, function(m, g1, g2) { return g1 + "CT" + g2; });
console.log(address);
console.log(output);

但是,您在注释中提到的MDN文章也有一个兼容性表,该表显示所有现代(但不是那么现代)的浏览器也支持字符串语法。