代码之家  ›  专栏  ›  技术社区  ›  Avatar

匹配变量赋值(“a=12”)但忽略函数赋值(“f(x)=x^2”)的正则表达式

  •  1
  • Avatar  · 技术社区  · 8 年前

    我的正则表达式越来越好了,但我还是会遇到这样的问题:

    ^\s*(\S*\w\S*)\s*=(.*)$ 识别/匹配变量赋值,例如。 a = 12 或 length = 3 ,工作完美无瑕。

    我最近的问题:

    防止 如果有函数赋值,则从捕获/匹配中删除正则表达式,例如:

    f(x) = x^2
    

    f(x) .

    ( .

    所有这些例子都被忽略了: f(x)=… , g(x)=… , test(x)=…

    var lineRegExp = /^\s*(\S*\w\S*)\s*=(.*)$/;
    var match = lineRegExp.exec(line);
    if(match) { ... }
    
    3 回复  |  直到 8 年前
        1
  •  2
  •   Avatar    6 年前

    变量名可以与 [A-Za-z_]\w*

    ^\s*([A-Za-z_]\w*)\s*=\s*(.*)

    只匹配变量赋值。

        2
  •  0
  •   Hassan Sadeghi    8 年前

    您可以现场测试:

    var txt = document.getElementById("txt");
    txt.addEventListener("keyup", function(){
      txt.style.backgroundColor=/^ *[a-z_][a-z0-9_]*? *= *?[^\s]+$/i.test(txt.value)?"#0f0":"#f00";
    });
    <input type='text' id='txt' placeholder='type here'/>
        3
  •  0
  •   Michał Turczyn    8 年前

    你可以试试这个样式 ^(?![^=\(]*\([^=\)]*\)).+ .

    一切都匹配,除非有 二者都 、开闭支架( ( 和 ) (?![^=\(]*\([^=\)]*\)) ,这确保了在*相等运算符之前没有打开和关闭括号** = (多亏了负面人物类 [^=\(]

    Demo