在Javascript中,我目前正在使用正则表达式:
/^(?!3838\s+REGATTA\s+COURT).*(COURT).*/我想完全避免匹配:
3838赛马会法庭
和匹配:(地址将有所不同)
5555赛艇会
但是,我只想匹配单词"COURT“,而不匹配整个字符串(这是我当前表达式返回的)。
此外,无法通过指定诸如^(?!5555\s+REGATTA\s+COURT)这样的表达式来删除5555 REGATTA法庭,因为地址会有所不同。基本上,我需要避免把所有的东西都匹配到“法庭”,然后再进行匹配。
发布于 2019-03-10 10:17:09
如果您担心在替换字符串中使用$1.$9,只需检查MDN文档中的标准化方式: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文章也有一个兼容性图表,它表明字符串语法也被所有现代(而不是那么现代)的浏览器所支持。
发布于 2019-03-10 08:19:38
下面是一种使用regex替换all的方法:
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);
https://stackoverflow.com/questions/55085393
复制相似问题