RegEx匹配逗号分隔列表中的单词

时间:2014-12-05 22:06:54

标签: 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('DoNotFindMe')
DoNotFindMe('FindMe')
DoNotFindMe('FindMe','FindMe')
DoNotFindMe('FindMe','FindMe','FindMe')

https://regex101.com/r/tB1nE2/1

3 个答案:

答案 0 :(得分:2)

您可以使用:

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')

答案 1 :(得分:2)

这是一个非常简单的方法:

([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'" );

alert(r);




使用与其他两个答案相同的测试代码;谢谢!

答案 2 :(得分:1)

这是一个避免函数参数的解决方案。它有点不稳定,但有效。基本上,您明确匹配左分隔符并通过反向引用将其包含在替换字符串中,因此它不会被删除,但是您必须对正确的分隔符使用正向前瞻声明,否则匹配指针将被移动到正确的分隔符之前,以便下一场比赛,因此它不能将该分隔符作为以下分隔词的左分隔符匹配:

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,我偷了你的代码模板,因为它非常适合我的测试!我给了你一个upvote吧。)