javascript - 从 Javascript 中的正则表达式匹配中排除单词数组

标签 javascript arrays regex replace

我有两个变量,一个字符串 [var str] 和一个单词数组 [var exceptions]。我使用以下正则表达式将每个长度超过 3 个字母的单词的每个中间字符替换为星号:

 var edited = str.replace(/\B\w\B/g, '*');

例如,字符串 "This is an example of what I am doing" 将返回为 "T**s is an e*****e of w* *t 我他妈的”

但是,我想为这个正则表达式添加异常(exception)。因此,例如,我得到了数组 (var exceptions = ["example","doing"]),然后我希望正则表达式返回:"T**s is an我在做什么的例子”

有人知道怎么做吗?如果有办法使用正则表达式来实现这一点,那就太好了,如果没有,我愿意接受其他建议。

非常感谢:)

最佳答案

您可以使用异常词 - 我看到它们都由字符组成 - 作为交替组并将其捕获到组 1 中,然后在 replace 回调中恢复它们。

正则表达式看起来像

/\b(example|doing)\b|\B\w\B/g

查看 JS 演示:

var exceptions = ["example","doing"];
var rx = new RegExp("\\b(" + exceptions.join("|") + ")\\b|\\B\\w\\B", "g");
var s = "This is an example of what I am doing";
var res = s.replace(rx, function ($0, $1) {
  return $1 ? $1 : '*';
});
console.log(res);

图案细节:

  • \b(example|doing)\b - 匹配整个单词 exampledoing 并放入捕获组 #1 中稍后在结果中恢复
  • | - 或
  • \B\w\B - 匹配其他字字符中的字字符(来自 [a-zA-Z0-9_] 集)。

关于javascript - 从 Javascript 中的正则表达式匹配中排除单词数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849239/

相关文章:

javascript - 在 Javascript 中使用 RegExp 查找文件序列

javascript - 用于在 json 中获取 token 的正则表达式

javascript - 如何将数组转换为数学计算表达式?

c - 交换不同长度 c 的二维数组中的元素

javascript - 带日期的 Highcharts 气泡图?

javascript - 谷歌地方信息 API : place_changed not fired

c++ - C++ 中的动态数组大小

python - 在字符序列中寻找主题

php - 在 PHP 中通过速记枚举 IPv4 地址

python - 在\n [string]\n 之间捕获字符串