代码之家  ›  专栏  ›  技术社区  ›  No one

用于插入标记而不是字符串的正则表达式

  •  1
  • No one  · 技术社区  · 7 年前

    opt = /([+-/%=|!&<>(),\[\]])/g;
    

    例子:

    var str = "SUM(1, one) + 12 + three";
    ["SUM", "(", "1", ",", " one", ")", " ", "+", " 12 ", "+", " three"]
    

    例子:

     var str = = "SUM(1, one) + 12 + three + 'Hello + world'";
    ["SUM", "(", "1", ",", " one", ")", " ", "+", " 12 ", "+", " three ", "+", " 'Hello ", "+", " world'"]
    

    我不想把“‘你好’、“+”、‘世界’”作为单独的标记。我想要“'Hello+world'”作为单个标记。基本上我想要标记变量,并用我的变量替换它们,而不影响字符串。

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

    假设您的报价是平衡的且未被替换,您可以使用此正则表达式进行前瞻:

    /([-+\/%=|!&<>(),\[\]])(?=(?:(?:[^']*'){2})*[^']*$)/
    

    RegEx Demo

    var str = "SUM(1, one) + 12 + three + 'Hello + world'";
    
    var re = /([-+\/%=|!&<>(),\[\]])(?=(?:(?:[^']*'){2})*[^']*$)/;
    
    var arr = str.split(re);
    
    console.log(arr)

    • (?:[^']*'){2} 查找一对单引号
    • (([^']*'){2})* 查找0对或多对引号
    • [^']*$
    • (?=...) 断言前面有偶数个单引号,因此只匹配单引号字符串之外的特殊字符。