RegEx返回SyntaxError:无效正则表达式:/*/:不需要重复

RegEx returning SyntaxError: Invalid regular expression: /*/: Nothing to repeat

本文关键字:不需要 正则表达式 返回 SyntaxError 无效 RegEx      更新时间:2023-09-26
var unicode = ['!', '@', '%', '$', '#', '^', '&', '*', '(', ')', '-', '_', '+', '=', '{', '}', '[', ']', '''', '|', ':', ';', '''', '"', ',', '<', '>', '.', '/', '?', '~', '`'];
var removeunicode = "my message!!@!(@^!@&(*";
for (var i = 0; i < unicode.length; i++) {
    removeunicode = removeunicode.replace(new RegExp(unicode[i], 'g'), "");
}

不知道这里有什么问题,看起来很好,基本上它把所有的unicode从我放的消息中剥离出来,RegExp似乎在和我乱搞,给了我

SyntaxError: Invalid regular expression:/*/: Nothing to repeat

有人能帮我吗?:)

您需要转义这些特殊字符,但是您可以这样写

if (!RegExp.escape) {
  RegExp.escape = function(value) {
    return value.replace(/['-'[']{}()*+?.,'''^$|#'s]/g, "''$&")
  };
}
var unicode = ['!', '@', '%', '$', '#', '^', '&', '*', '(', ')', '-', '_', '+', '=', '{', '}', '[', ']', '''', '|', ':', ';', '''', '"', ',', '<', '>', '.', '/', '?', '~', '`'];
var removeunicode = "my message!!@!(@^!@&(*";
var regex = new RegExp(unicode.map(function(val) {
  return RegExp.escape(val);
}).join('|'), 'g');
removeunicode = removeunicode.replace(regex, "");
snippet.log(removeunicode);
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>