在 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, "");
}
但我不知道如何告诉它“只有当它前面没有“函数”一词时
最佳答案
问题在于Javascript正则表达式没有lookbehind功能,因此您无法仅使用正则表达式来测试前面是否存在“function”关键字。 (大多数情况下,当此功能可用时,lookbehind 内的子模式必须具有固定宽度,这意味着您无法测试函数名称与“function”关键字用未知数量的空格。)
所以你需要一个解决方法。例如,您可以使用捕获组来了解之前是否存在具有这种模式的关键字函数:
/\b(?:(function)\s+)?(init\w*)\s*\(/
如果第一个捕获组包含“function”,您可以排除匹配。
关于javascript - 正则表达式:如果前面没有单词,则匹配短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41602150/