javascript 正则表达式替换特殊字符,但允许白名单,使用 xregexp
javascript regular expression to replace special characters, but allow a whitelist, using xregexp
我想替换字符串中的大多数特殊字符(在 javascript 中),但允许一些特殊情况,例如 c++、c# 等。我已经在 node.js 中尝试了 xregexp 库,我认为我能够删除所有非字母和数字。我还想允许所有外语字母。这是我目前所拥有的:
var str = "I do programming in c++ and sometimes c#, but + and # should be removed";
regex = XRegExp('[^\s\p{N}\p{L}]+', 'g');
var replaced = XRegExp.replace(str, regex, "");
console.log(replaced);
这输出
I do programming in c and sometimes c, but and should be removed
我需要创建某种包含允许的词的列表,例如 c++ 和 c#。期望的输出是:
I do programming in c++ and sometimes c#, but and should be removed
您可以只在捕获组内使用交替,然后在替换模式中使用反向引用恢复此文本:
var str = "I do programming in c++ and sometimes c#, but + and # should be removed";
regex = XRegExp('(\b(?:c[+]{2}|c#)(?!\w))|[^\s\p{N}\p{L}]+', 'ig');
// ^-- capture group 1 -----^ ^
var replaced = XRegExp.replace(str, regex, "");
// ^^
console.log(replaced);
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-all-min.js"></script>
注意我添加了一个 i
标志来使模式不区分大小写,\b
在交替的开头只匹配单词边界(因为 c++
和 c#
以字母(单词字符)开头,前瞻 (?!\w)
确保 +
和 #
之后没有单词字符(\b
在这里不起作用因为这些不是单词字符)。
我想替换字符串中的大多数特殊字符(在 javascript 中),但允许一些特殊情况,例如 c++、c# 等。我已经在 node.js 中尝试了 xregexp 库,我认为我能够删除所有非字母和数字。我还想允许所有外语字母。这是我目前所拥有的:
var str = "I do programming in c++ and sometimes c#, but + and # should be removed";
regex = XRegExp('[^\s\p{N}\p{L}]+', 'g');
var replaced = XRegExp.replace(str, regex, "");
console.log(replaced);
这输出
I do programming in c and sometimes c, but and should be removed
我需要创建某种包含允许的词的列表,例如 c++ 和 c#。期望的输出是:
I do programming in c++ and sometimes c#, but and should be removed
您可以只在捕获组内使用交替,然后在替换模式中使用反向引用恢复此文本:
var str = "I do programming in c++ and sometimes c#, but + and # should be removed";
regex = XRegExp('(\b(?:c[+]{2}|c#)(?!\w))|[^\s\p{N}\p{L}]+', 'ig');
// ^-- capture group 1 -----^ ^
var replaced = XRegExp.replace(str, regex, "");
// ^^
console.log(replaced);
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-all-min.js"></script>
注意我添加了一个 i
标志来使模式不区分大小写,\b
在交替的开头只匹配单词边界(因为 c++
和 c#
以字母(单词字符)开头,前瞻 (?!\w)
确保 +
和 #
之后没有单词字符(\b
在这里不起作用因为这些不是单词字符)。