javascript正则表达式可以替换特殊字符,但允许使用白名单,使用xregexp

javascript regular expression to replace special characters, but allow a whitelist, using xregexp

本文关键字:白名单 名单 xregexp 使用 许使用 正则表达式 替换 特殊字符 javascript      更新时间:2023-09-26

我想替换字符串中的大多数特殊字符(在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, "$1");
//                                          ^^
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在这里不起作用,因为它们不是单词字符)。