我有此正则表达式可从字符串中删除所有非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]
)。
答案 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,"");