【问题标题】:Regular expression for apostrophes/ single quotes with double双引号/单引号的正则表达式
【发布时间】:2012-07-23 16:25:06
【问题描述】:

我目前正在使用正则表达式(在 Javascript 中)用智能引号替换双引号:

// ie: "quotation" to “quotation”

这是我用来替换双引号的表达式:

str = str.replace(/"([A-Za-z ]*)"/ig, "“$1”")

如果引号内的短语不包含额外的标点符号,上述方法非常有效,但是,我还需要替换任何撇号:

// ie: replace "It's raining again" with “It’s raining again!”

如果不封装,替换单引号/撇号的表达式可以正常工作:

str.replace(/\'\b/g, "’"); // returns it's as it’s correctly

// Using both:
str.replace(/"([A-Za-z ]*)"/ig, "“$1”").replace(/\'\b/g, "’");

// "It's raining again!" returns as "It’s raining again!"
// Ignores double quotes

我知道这是因为替换双引号的表达式仅与字母匹配,但我对正则表达式的有限经验让我对如何为可能还包含单引号的引号创建匹配感到困惑!

任何帮助将不胜感激!提前致谢。

【问题讨论】:

    标签: javascript regex string replace double-quotes


    【解决方案1】:

    您可以在引号中包含除引号之外的所有内容:

    str = str.replace(/"([^"]*)"/ig, "“$1”")
    

    另一种选择:使用非贪婪搜索:

    str = str.replace(/"(.*?)"/ig, "“$1”")
    

    此外,我不确定您是否只需要更改单词末尾的单引号。将它们全部更改会更好吗?

    replace(/\'/g, "’");
    

    【讨论】:

    • 非常非常感谢 - 工作愉快!字符串匹配的结尾是我的疏忽,因为我从我编写的一个旧函数中复制了它,该函数需要匹配由单引号封装的单词 - 因此是边界条件。感谢您指出这一点:)
    • 尼克,很高兴为您提供帮助!
    【解决方案2】:

    您可以搜索除" 以外的任何内容。如果您将"Hey," she said, "what's up?" 之类的东西用作您的str,我也会与? 进行惰性匹配:

    str.replace(/"([^"]*?)"/ig, "“$1”").replace(/\'\b/g, "’");
    

    【讨论】:

    • 精湛,非常感激!
    【解决方案3】:

    只是为了添加到当前答案,您正在对 [A-Za-z ]* 执行双引号替换匹配,这意味着“匹配大写、小写或空格”。这不会匹配 It's raining,因为您的匹配表达式不包含单引号。

    遵循匹配“除了另一个双引号之外的任何内容”的建议,因为对于您的原始正则表达式,She said "It's raining outside." He said "really?" 之类的字符串将导致 She said ”It's raining outside." He said "really?”(贪婪匹配将跳过“内部”双引号。)

    【讨论】:

    • 非常感谢您的意见,非常感谢。如果没有这些回复的慷慨建议和帮助,我可能仍在努力处理 javascript 中的一些字符串替换,但除此之外,我将继续参考它们以帮助提高我对表达式的整体理解!再次感谢:)
    • 我很高兴听到它很有用!
    【解决方案4】:

    最好限制引号左右的特殊字符,尤其是在 html 文件中出现这种情况时。我正在使用这个。

    str = str.replace(/([\n >*_-])"([A-Za-z0-9 ÆØÅæøå.,:;!#@]*)"([ -.,!<\n])/ig, "$1«$2»$3");
    

    通过这种方式,您可以避免替换 html 标记中的引号,例如 href="http.....

    通常,开头引号的左侧有一个空格,结尾引号的右侧有另一个空格。在 html 文档中,它可能是一个右括号、一个新行等。我还包括了挪威字符。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多