Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在部分捕获负前瞻中的字符串_Javascript_Regex - Fatal编程技术网

Javascript 正在部分捕获负前瞻中的字符串

Javascript 正在部分捕获负前瞻中的字符串,javascript,regex,Javascript,Regex,我的正则表达式: /(?!#REF!)([^!,]{1,99})!/g 我的测试字符串: foo,#REF!,bar!,baz,qux! 它目前正在运行,但所需的结果仅适用于bar和qux待匹配。我使用了消极的前瞻(?!#REF!)来防止这种情况,但是REF作为匹配项[^!,]{1,99} 如何防止REF匹配-使用负前瞻是正确的方法吗?您可以使用以下正则表达式: (?<=^|,)(?!#REF!)([^!,]{1,99})! 并且通过参考1st捕获组由于您的字符串是逗号分隔的项目列表

我的正则表达式:

/(?!#REF!)([^!,]{1,99})!/g
我的测试字符串:

foo,#REF!,bar!,baz,qux!
它目前正在运行,但所需的结果仅适用于
bar
qux待匹配。我使用了消极的前瞻
(?!#REF!)
来防止这种情况,但是
REF作为匹配项
[^!,]{1,99}


如何防止
REF匹配-使用负前瞻是正确的方法吗?

您可以使用以下正则表达式:

(?<=^|,)(?!#REF!)([^!,]{1,99})!

并且通过参考
1st
捕获组

由于您的字符串是逗号分隔的项目列表,您可以使用逗号拆分字符串,删除所有空项目(如果有),仅获取以
结尾的项目然后删除
从字符串末尾开始:

var s=“foo,#REF!、bar!、baz、qux!”;
console.log(s.split(','))
.filter(布尔)//删除空项
.filter(函数(x){return x.charAt(x.length-1)==“!”&&x!==“#REF!”})//以!结束,而不是#REF!
.map(函数(y){返回y.substr(0,y.length-1)})//删除!

);确保从字符串或逗号的开头开始匹配,您的值在组1中。顺便说一句,您的模式中只有一个捕获组。谢谢@WiktorStribiżew-这很有效,但它也匹配前导逗号,例如,我得到
,bar
,qux。是,但它不会捕获它。正如我所写的,您的值在第1组中。@WiktorStribiżew-现在当然知道了。一个非正则表达式的方法是注意,JavaScript正则表达式中对lookbehinds的支持是一个非常新的发展。例如,这在当前存在的任何版本的Firefox中都不起作用。@Ry︁: 你完全正确,我已经相应地编辑了我的答案!谢谢你的反馈谢谢-我会和Wiktor一起去,但还是投了赞成票
(?:^|,)(?!#REF!)([^!,]{1,99}!)