代码之家  ›  专栏  ›  技术社区  ›  Matt Lacey

用JavaScript正则表达式替换iOS 11智能标点符号

  •  1
  • Matt Lacey  · 技术社区  · 7 年前

    So I found this question ,这对iOS中的智能标点符号问题提供了一些很好的见解,但我想大规模地进行替换,即在一个完整的字符串上,而不是在用户输入时进行替换。

    我环顾四周,似乎通过使用 \u<<code point>> 。这对匹配regex有用吗?

    我有这个字符串:

    "This is a message from iOS with it’s so-called “smart” punctuation.
    

    我一直在尝试用以下内容替换测试:

    x.replace(/\u8220/g, 'XXXX');
    

    我可以验证代码点是否在字符串中(通过dev tools JS控制台):

    > x.charCodeAt(47);
    8220
    

    但是调用replace的输出是相同的字符串,没有改变。我还尝试将unicode部分包装到 [] 但是没有运气。我是在装聋作哑,还是不以这种方式支持我?

    1 回复  |  直到 7 年前
        1
  •  2
  •   kshetline    7 年前

    8220是 十进制的 左双引号的值。使用 \uXXXX 您需要指定 十六进制 在这种情况下,代码点的值 \u201C

    下面的表达式将用“直”引号替换字符串中的所有卷曲引号:

    s.replace(/[\u2018\u2019\u201C\u201D]/g, (c) => '\'\'""'.substr('\u2018\u2019\u201C\u201D'.indexOf(c), 1));
    
    推荐文章