使用正则表达式有条件地替换字符串吗?

时间:2018-07-18 16:43:36

标签: javascript regex

除非完全匹配为@example/,否则我需要替换文件中所有@example/is的出现。

当前我有以下代码:

 let updated = s.replace(/@example\//g, replacement);

但是,这将更新所有事件,包括带有@example/is的事件。如何排除文件中出现的@example/is

附录

我只是粘贴我用来执行更新的脚本(其中包含了很好的答案),以防其他人需要执行以下操作:

const fs = require("fs");
const globby = require("globby");
globby("./test/**/*.ts")
  .then(paths => {
    paths.forEach(update);
  })
  .catch(e => console.log(e));

function update(path) {
  let replacement = "@ex/";
  let js = fs.readFileSync(path, "utf8");
  js = js.replace(/@example\/(?!is)/g, replacement)
  fs.writeFileSync(path, js);
}

1 个答案:

答案 0 :(得分:6)

您可以使用negative lookahead assertion

let updated = s.replace(/@example\/(?!is)/g, replacement)

(?!is)是一个否定的超前断言,当is之后@example/

时,匹配将失败