Javascript 正则表达式立即停止匹配,或者如果有逗号
我可能没有用最好的方式表达这个问题,但请容忍我 有这根绳子Javascript 正则表达式立即停止匹配,或者如果有逗号,javascript,regex,Javascript,Regex,我可能没有用最好的方式表达这个问题,但请容忍我 有这根绳子 select * from my_functions (in_p1 := remove, in_p2 := $1, in_p3 := remove, in_p4 := $2,
select * from my_functions (in_p1 := remove,
in_p2 := $1,
in_p3 := remove,
in_p4 := $2,
in_p5 := remove,
in_p6 := $3,
in_p7 := remove)
我需要使用remove
关键字删除与检索匹配的参数
所以我构建了这个
text=text.replace(/,[^,]*?remove/g',)
,它适用于除p1
之外的所有情况。我如何告诉它立即停止匹配,或者如果有逗号,只在逗号后停止?由于需要在两个可能的位置删除逗号,我看到的使用单个正则表达式执行此操作的唯一选项是替换:
// vvvvvvvvvvvvv−−−−−−−−−−−−−−−−−−−−−−−−−−−−− first alternative
text = text.replace(/,[^,]*?remove|(?<=\()[^,]*?remove,/g, '');
// ^^^^^^^^^^^^^^^^^^^^−−−−−−−− second alternative
你能依靠这些名字中的
in
前缀吗?不,有时它们没有前缀,这对我们人类来说可能很容易辨别,但是计算机如何知道它不应该与my_函数中的select*的整体匹配(in_p1:=remove
?例如,参数都是由[A-Za-z0-9]
组成的?[A-Za-z0-9_]
我想我们可以假设是的,我刚刚意识到我说的不起作用……对不起!(如果你没有看到替代方法[no pun!]避免查找,请点击刷新。我添加了一个。)(也没有任何理由让非捕获组出现,这是一个编辑错误。我已经删除了它。)我选择了第一个,现在开始阅读关于lookbehind的文章。谢谢你!@Greggz-我的荣幸。这里有一个支持列表。基本上,除了Safari之外,现代浏览器也支持它们,但它还是相当新的。(Safari无疑会在某个时候增加支持。)Legacy Edge(v44和更早版本,由于Chromium Edge卷展栏是增量的,所以对于很多人来说,它仍然是当前的Edge),IE不支持它们。