我有这个PHP正则表达式,用于从字符串中删除utf8特殊字符:

[\x00-\x1F]|\xC2[\x80-\x9F]|\xE2[\x80-\x8F]{2}|\xE2\x80[\xA4-\xA8]|\xE2\x81[\x9F-\xAF]


我需要将其转换为Javascript正则表达式。
我尝试了这段代码:

str = str.replace(/[\x00-\x1F]|\xC2[\x80-\x9F]|\xE2[\x80-\x8F]{2}|\xE2\x80[\xA4-\xA8]|\xE2\x81[\x9F-\xAF]/g, '');


但是它什么也没做。

我需要你的帮助。
谢谢。

最佳答案

错误简单,效果显着:

strTest = strTest.replace(/your regex here/g, "$1");
// ----------------------------------------^


如果没有“ global”标志,则仅在第一个匹配项发生替换。

旁注:要删除任何不满足某种复杂条件的字符,例如落入某些Unicode字符范围的集合,可以使用负前瞻:

var regex = /(?![\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})./g;
strTest = strTest.replace(regex, "")


regex读为

(?!#否定前瞻:位置*后跟*:
  […]#从上方允许的任何字符范围
)#前瞻
。 #匹配此字符(仅在满足先前条件的情况下!)

09-13 01:08