Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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,如何匹配出现在分隔符之间的文本,而不匹配分隔符本身 文本 DoNotFindMe('DoNotFindMe') DoNotFindMe(FindMe) DoNotFindMe(FindMe,FindMe) DoNotFindMe(FindMe,FindMe,FindMe) text = text.replace(/[\(,]([a-zA-Z]*)[,\)]/g, function(item) { return "'" + item + "'"; }); DoNotFindMe('Do

如何匹配出现在分隔符之间的文本,而不匹配分隔符本身

文本

DoNotFindMe('DoNotFindMe')
DoNotFindMe(FindMe)
DoNotFindMe(FindMe,FindMe)
DoNotFindMe(FindMe,FindMe,FindMe)
text = text.replace(/[\(,]([a-zA-Z]*)[,\)]/g, function(item) {
    return "'" + item + "'";
});
DoNotFindMe('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')
脚本

DoNotFindMe('DoNotFindMe')
DoNotFindMe(FindMe)
DoNotFindMe(FindMe,FindMe)
DoNotFindMe(FindMe,FindMe,FindMe)
text = text.replace(/[\(,]([a-zA-Z]*)[,\)]/g, function(item) {
    return "'" + item + "'";
});
DoNotFindMe('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')
预期结果

DoNotFindMe('DoNotFindMe')
DoNotFindMe(FindMe)
DoNotFindMe(FindMe,FindMe)
DoNotFindMe(FindMe,FindMe,FindMe)
text = text.replace(/[\(,]([a-zA-Z]*)[,\)]/g, function(item) {
    return "'" + item + "'";
});
DoNotFindMe('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')
您可以使用:

var s = "DoNotFindMe('DoNotFindMe')\nDoNotFindMe(FindMe)\nDoNotFindMe(FindMe,FindMe)\nDoNotFindMe(FindMe,FindMe,FindMe)";
var r = s.replace(/(\([^)]+\))/g, function($0, $1) { 
       return $1.replace(/(\b[a-z]+(?=[,)]))/gi, "'$1'"); }, s);
DoNotFindMe('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')
您可以使用:

var s = "DoNotFindMe('DoNotFindMe')\nDoNotFindMe(FindMe)\nDoNotFindMe(FindMe,FindMe)\nDoNotFindMe(FindMe,FindMe,FindMe)";
var r = s.replace(/(\([^)]+\))/g, function($0, $1) { 
       return $1.replace(/(\b[a-z]+(?=[,)]))/gi, "'$1'"); }, s);
DoNotFindMe('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')

这里有一个避免函数参数的解决方案。这有点不稳定,但有效。基本上,您可以显式匹配左分隔符,并通过反向引用将其包含在替换字符串中,这样它就不会被删除,但随后必须对右分隔符使用正向前瞻断言,因为否则,下一次匹配时匹配指针将移到右分隔符的前面,因此,它将无法匹配该分隔符作为以下分隔词的左分隔符:

var s = "DoNotFindMe('DoNotFindMe')\nDoNotFindMe(FindMe)\nDoNotFindMe(FindMe,FindMe)\nDoNotFindMe(FindMe,FindMe,FindMe)";
var r = s.replace(/([,(])([a-zA-Z]*)(?=[,)])/g, "$1'$2'" );
alert(r);
导致

DoNotFindMe('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')

(感谢anubhava,我偷了你的代码模板,因为它非常适合我的测试!我给了你一个投票。)

这里有一个避免函数参数的解决方案。这有点不稳定,但有效。基本上,您可以显式匹配左分隔符,并通过反向引用将其包含在替换字符串中,这样它就不会被删除,但随后必须对右分隔符使用正向前瞻断言,因为否则,下一次匹配时匹配指针将移到右分隔符的前面,因此,它将无法匹配该分隔符作为以下分隔词的左分隔符:

var s = "DoNotFindMe('DoNotFindMe')\nDoNotFindMe(FindMe)\nDoNotFindMe(FindMe,FindMe)\nDoNotFindMe(FindMe,FindMe,FindMe)";
var r = s.replace(/([,(])([a-zA-Z]*)(?=[,)])/g, "$1'$2'" );
alert(r);
导致

DoNotFindMe('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')

(感谢anubhava,我偷了你的代码模板,因为它非常适合我的测试!我给了你一票支持。)

下面是一个非常简单的方法:

([a-zA-Z]+)(?=,|\))
这将查找任何后跟逗号或右括号的单词

var s=“DoNotFindMe('DoNotFindMe')\nDoNotFindMe(FindMe)\nDoNotFindMe(FindMe,FindMe)\nDoNotFindMe(FindMe,FindMe,FindMe)”;
var r=s.replace(/([a-zA-Z]+)(?=,|\)/g,“$1”);

警报(r)这里有一个非常简单的方法:

([a-zA-Z]+)(?=,|\))
这将查找任何后跟逗号或右括号的单词

var s=“DoNotFindMe('DoNotFindMe')\nDoNotFindMe(FindMe)\nDoNotFindMe(FindMe,FindMe)\nDoNotFindMe(FindMe,FindMe,FindMe)”;
var r=s.replace(/([a-zA-Z]+)(?=,|\)/g,“$1”);

警报(r)啊,我不知道如何做“积极的前瞻性断言”。谢谢啊,我不知道如何做一个“积极的前瞻性断言”。谢谢啊,这利用了一个事实,即,或)在a之前永远不会发生(.Right?Right on,因此它不会匹配
DoNotFindMe(
:)并且感谢您提出了一个好问题…我必须挖掘我的正则表达式知识,我已经有一段时间没有使用了…我花了一点时间才得出这个简单的结果哈哈。啊,这利用了一个事实,或)在(.Right?Right on,所以它不会匹配
DoNotFindMe(
:),谢谢你提出了一个好问题…我必须挖掘我的正则表达式知识,我已经有一段时间没有使用了…我花了一点时间才得出这个简单的答案哈哈。