从字符串中删除所有非ASCII字符(智能引号除外)

时间:2019-08-03 19:44:14

标签: javascript regex

我有此正则表达式可从字符串中删除所有非ASCII字符,包括所有智能引号:

str.replace(/[\u{0080}-\u{FFFF}]/gu,"");

但是我需要保留智能报价

用于删除智能单引号的正则表达式为:[\u2018\u2019\u201A\u201B\u2032\u2035],对于智能双引号的正则表达式为:[\u201C\u201D\u201E\u201F\u2033\u2036]

我需要一个组合的正则表达式,以除去智能引号([\u{0080}-\u{FFFF}][\u2018\u2019\u201A\u201B\u2032\u2035])之外的所有非ASCII([\u201C\u201D\u201E\u201F\u2033\u2036])。

2 个答案:

答案 0 :(得分:1)

请注意,您需要在带有\u{XXXX}修饰符的正则表达式中使用u表示法,并且要构建正则表达式,您需要将带有异常的字符类放到前面的负前瞻中您更通用的模式:

/(?![\u{2018}\u{2019}\u{201A}\u{201B}\u{2032}\u{2035}\u{201C}\u{201D}\u{201E}\u{201F}\u{2033}\u{2036}])[\u{0080}-\u{FFFF}]/gu

请参见regex demo

请注意,Unicode表中的某些字符是一个接一个的,因此我们可以使用范围来缩短模式:

/(?![\u{2018}-\u{201F}\u{2032}\u{2033}\u{2035}\u{2036}])[\u{0080}-\u{FFFF}]/gu

请参见this demo

答案 1 :(得分:0)

而不是匹配非ASCII,而是匹配ASCII +所需的字符,然后取反表达式。示例:

str.replace(/[^\x00-\x7F\u2018\u2019\u201A\u201B\u2032\u2035\u201C\u201D\u201E\u201F\u2033\u2036]/gu,"");
相关问题