【问题标题】:Remove all non-ASCII characters from a string except smart quotes从字符串中删除除智能引号外的所有非 ASCII 字符
【发布时间】:2019-08-03 19:44:14
【问题描述】:

我有这个正则表达式,它从字符串中删除所有非 ascii 字符,包括所有智能引号:

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

但我需要保留智能引号

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

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

【问题讨论】:

  • 我赞成你的回答。

标签: javascript regex


【解决方案1】:

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

/(?![\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

【讨论】:

    【解决方案2】:

    不是匹配非ascii,而是匹配ascii +你需要的字符,并对表达式取反。示例:

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

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2012-01-21
      相关资源
      最近更新 更多