Javascript Regex For Comma Delimited String

时间:2012-06-01 22:29:44

标签: javascript regex

我需要一个正则表达式,它对input / type = hidden字段的值执行“contains”函数。此隐藏字段以逗号分隔的字符串存储唯一值。

这是一个场景 值:“mix”需要添加到隐藏字段中。只有当它不以逗号分隔的值存在时才会被添加。

由于我对正则表达式的了解有限,我无法阻止搜索返回“mix”值的所有发生。例如if:hiddenField.val ='mixer,mixon,mixx',正则表达式总是返回true,因为所有三个单词都包含“mix”字符。

提前感谢您的帮助

4 个答案:

答案 0 :(得分:3)

您可以使用\b元字符设置字边界:

var word = "mix";
new RegExp("\\b" + word + "\\b").test(hidden.value);

DEMO: http://jsfiddle.net/ztYff/


UPDATE。为了在使用变量而不是硬编码时保护我们正常表达可能出现的问题(请参阅下面的评论),我们需要转义word变量中的特殊字符。 One possible solution将使用以下方法:

RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

DEMO: http://jsfiddle.net/ztYff/1/


更新2。关注@Porco's answer我们可以将正则表达式和字符串拆分结合起来,以获得另一种通用解决方案:

hidden.value.split(/\s*,\s*/).indexOf(word) != -1;

DEMO: http://jsfiddle.net/ztYff/2/

答案 1 :(得分:2)

hiddenField.val.split(',').indexOf('mix') >= 0

也可以使用正则表达式(startofstring或逗号+混合+ endofstring或逗号):

hiddenField.val.match(/(,|^)mix($|,)/)

答案 2 :(得分:0)

hiddenField.val.match(/^(mix)[^,]*/);

答案 3 :(得分:0)

怎么样:

/(^|,)\s*mix\s*(,|$)/.test(field.value)

匹配mix,如果它位于字符串的开头或末尾或逗号之间。如果列表中的每个条目都可以包含多个单词,则可能需要删除\s*