【问题标题】:JavaScript Regex: How to match terms outside of the quotation marks?JavaScript 正则表达式:如何匹配引号外的术语?
【发布时间】:2022-12-10 12:45:32
【问题描述】:

目标是匹配 / and /gu/ or /gu 并将它们替换为 ' AND '' OR ' 但如果它们在引号内,则不应进行替换。

例如,如果字符串是term:"cat and dog" and keyword:view or keyword:impression,则应将其替换为term:"cat and dog" AND keyword:view OR keyword:impression


事实证明可以只使用 REGEX 来解决这个问题。

regex = /\b(and|or)\b(?=(?:[^"]*"[^"]*")*[^"]*$)/;

regex.test("cat and dog") // true
regex.test("cat or dog") // true
regex.test("\"cat and dog\"") // false
regex.test("\"cat and dog\" or \"cat or dog\"") // true
regex.test("\"cat and dog\" plus \"cat or dog\"") // false

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我们可以在这里尝试正则表达式替换,借助于交替:

    var input = "term:"cat and dog" and keyword:view or keyword:impression";
    var output = input.replace(/".*?"|w+/g, (x) => x.match(/^(?:and|or)$/i) ? x.toUpperCase() : x);
    console.log(output);

    这里的技巧是先搜索"..." 条款。如果失败,我们会匹配任何其他单词,一次匹配一个。然后,在回调替换中,我们忽略双引号项,从而忽略双引号内的andor。我们只是通过大写来实际替换 and/or

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多