【问题标题】:escaping MSWord style quotes in a RegExp在 RegEx 中转义 MS Word 样式的引号
【发布时间】:2010-06-21 04:20:14
【问题描述】:

我需要转换粘贴到文本区域的字符串,这样,如果它们是从 MS Word 粘贴的,Word 喜欢使用的奇怪引号和撇号将被转换为常规的单引号和双引号。不幸的是,当我保存时,我的文本编辑器似乎已经转换了这些引号,所以我所做的任何正则表达式似乎都搞砸了。所以像这样的

string = string.replace(new RegExp("“", "g"), '"').replace(new RegExp("”", "g"), '"').replace(new RegExp("’", "g"), "'");

似乎不起作用。 (我什至不知道它是否会在这里正确发布)

如何构造正则表达式以使用所有“常规”字符查找这些引号?大概是一个转义序列?我更喜欢避免使用 RegExp“文字”表示法,即使创建对象的速度较慢。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    尝试获取要删除的字符的 ASCII 码并使用它来代替字符本身:

    string = string.replace(new RegExp("\xe2\x80\x9c", "g"), '"').replace(new RegExp("\xe2\x80\x9d", "g"), '"').replace(new RegExp("\xe2\x80\x99", "g"), "'");
    

    (我使用 Notepad++ 和 HexEdit 插件来获取代码)

    编辑:
    详情请参阅http://www.regular-expressions.info/unicode.html
    你的代码应该是(希望我没有混淆代码......):

    string = string.replace(new RegExp("\u201c", "g"), '"').replace(new RegExp("\u201d", "g"), '"').replace(new RegExp("\u2019", "g"), "'");
    

    【讨论】:

    • 这似乎不起作用。如果我使用 charCodeAt() 检查,我会得到十进制的 8217、8220 和 8221,即十六进制的 2019 201C 201D。不知道如何形成正则表达式。
    猜你喜欢
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多