【问题标题】:Regexp in the Case of Single and Double Quotes单引号和双引号的正则表达式
【发布时间】:2017-06-12 12:31:47
【问题描述】:

我有以下 JavaScript:

let strTest = `
  "The issue": "L'oggetto ",
  "issue": "oggetto",
  "issue": 'oggetto "novo" ',
  `;

我正在尝试对上述字符串进行标记。

我的正则表达式尝试:

let regExp = /["'](.*?)["']\s*?:\s*?['"](.*?)["']/gm;

这很好用,除非我在双引号 (") 中有一对单引号 ('),反之亦然。

只有一个正则表达式可以做到这一点吗?

【问题讨论】:

  • “是否有可能只用一个正则表达式语句来完成?” 不,不能用 JavaScript 的正则表达式。你需要一个更复杂的解析器来正确处理它。
  • 所以它看起来只能用一个正则表达式作为 Rafael Kennedy state ;)
  • @用户:不,不能,不正确。

标签: javascript regex tokenize


【解决方案1】:

我回答我自己,我想我带来了一个较小的正则表达式:

` /["'](.*)["']\s*?:\s*?["'[](.*)["']]/g ` 

看看regex101.com/r/g9WCbi/1

【讨论】:

    【解决方案2】:

    您可以使用反向引用:

    /(["'])(.*?)\1\s*?:\s*?(['"])(.*?)\3/gm
    

    这将在标记化的字符串中包含引号,但您可以通过仅使用偶数标记将它们从生成的匹配中删除。

    编辑: 正如@TJ Crowder 指出的那样,如果字符串在字符串中包含\" 形式的转义引号,这将无法正常工作。为了完全适应那些转义的引号,并且不中断像\\"(引号前的转义反斜杠)这样的字符串,您需要使用多个正则表达式进行解析或采取不同的策略

    如果这来自 JSON,您可能想要查看的另一件事是忽略正则表达式,而只是迭代您的 json 对象的属性。这取决于你得到的字符串是否作为有效的 json 输入。

    【讨论】:

    • 这正是我所需要的 :) 感谢 Rafael Kennedy
    • @user2521616:请注意,这不能正确处理转义引号:jsfiddle.net/bkkcyy8L 这就是为什么它不能使用 JavaScript 的正则表达式引擎在单个正则表达式中完成。如果您尝试处理转义的引号,您可以到达它似乎可以工作的地步,然后在引用之前的转义反斜杠上失败。等等。
    • 很公平。如果在这种特殊情况下这是一个问题,这取决于该字符串是如何生成的,但这是一个很好的观点。
    • / (['"])(?:|(.+?[^\\](?:(?:\\\\)+|[^\\])))\1\s*:\s*(['"])(?:|(.+?[^\\](?:(?:\\\\)+|[^\\])))\3/g怎么样
    • 我想我附带了一个较小的正则表达式:` /["'](.*)["']\s*?:\s*?["'[](.*)[ "']]/g `看看regex101.com/r/g9WCbi/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多