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

时间:2018-09-17 09:53:41

标签: javascript regex

使用正则表达式会越来越好,但是会遇到如下问题:

我正在使用正则表达式:^\s*(\S*\w\S*)\s*=(.*)$ 识别/匹配变量分配,例如a = 12length = 3,可以正常工作。

我最近的问题:

如果有功能分配,例如,我需要防止捕获/匹配正则表达式:

f(x) = x^2

因为上面的正则表达式仍然捕获了“变量” f(x)

如何修改正则表达式,使其仍然有效,但是如果有括号(,则忽略“变量”。

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

JS代码:

var lineRegExp = /^\s*(\S*\w\S*)\s*=(.*)$/;
var match = lineRegExp.exec(line);
if(match) { ... }

3 个答案:

答案 0 :(得分:2)

变量名可以用[A-Za-z_]\w*进行匹配,因此您可以简单地使用^\s*([A-Za-z_]\w*)\s*=\s*(.*)来仅匹配变量分配。

答案 1 :(得分:0)

您可以实时测试它:

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'/>

答案 2 :(得分:0)

您可以尝试使用此模式^(?![^=\(]*\([^=\)]*\)).+

它与所有样式匹配,除非同时有两者,开括号和闭括号(())。它使用否定的前瞻性(?![^=\(]*\([^=\)]*\))实现了这一目标,从而确保了在等号运算符=之前**(由于否定的字符类[^=\(]),我们不会有开括号。 >

Demo