1

我想替换字符串中的大多数特殊字符(在 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
4

1 回答 1

1

您可以在捕获组中使用交替,然后在替换模式中使用反向引用恢复此文本:

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在这里不起作用,因为这些不是单词字符)。

于 2015-12-16T07:51:55.593 回答