我有两个变量,一个字符串 [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
- 匹配整个单词example
或doing
并放入捕获组 #1 中稍后在结果中恢复|
- 或\B\w\B
- 匹配其他字字符中的字字符(来自[a-zA-Z0-9_]
集)。
关于javascript - 从 Javascript 中的正则表达式匹配中排除单词数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849239/