正则表达式:如果前面没有单词

时间:2017-01-11 22:48:46

标签: javascript regex regular-language

在JavaScript中,我试图匹配以下所有出现的

initChart('something');
initMap('another');

initChart();
initMap();

除非前面有'function'一词,意思是,不匹配

function initChart(param) { ... }
function initMap(param) { ... }

基本上我需要去掉所有调用函数的事件,同时保留函数定义。我到目前为止

/init.*(.*)/i

这就是我的脚本剥离匹配的原因:

var scriptRegex = /init.*(.*)/i;
while (scriptRegex.test(responseHTML)) {
   responseHTML = responseHTML.replace(scriptRegex, "");
}

但我坚持如何告诉它“只有在它之前没有'功能'这个词

1 个答案:

答案 0 :(得分:1)

问题是Javascript正则表达式没有lookbehind功能,所以你不能测试是否有"功能"关键字之前只有正则表达式。 (并且大多数情况下,当此功能可用时,lookbehind内的子模式必须具有固定宽度,这意味着您无法测试函数名称与" function"具有未知空格数的关键字。)

所以你需要一个解决方法。例如,您可以使用捕获组来了解此类模式之前是否存在关键字函数:

/\b(?:(function)\s+)?(init\w*)\s*\(/

如果第一个捕获组包含"功能"你可以排除比赛。