使用正则表达式会越来越好,但是会遇到如下问题:
我正在使用正则表达式:^\s*(\S*\w\S*)\s*=(.*)$
识别/匹配变量分配,例如a = 12
或length = 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) { ... }
答案 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)
您可以尝试使用此模式^(?![^=\(]*\([^=\)]*\)).+
。
它与所有样式匹配,除非同时有两者,开括号和闭括号((
和)
)。它使用否定的前瞻性(?![^=\(]*\([^=\)]*\))
实现了这一目标,从而确保了在等号运算符=
之前**(由于否定的字符类[^=\(]
),我们不会有开括号。 >