我需要一个对输入/类型=隐藏字段的值执行“包含”功能的正则表达式。此隐藏字段将唯一值存储在逗号分隔的字符串中。
这是一个场景。
value: "mix" 需要添加到隐藏字段。仅当它不作为逗号分隔值存在时才会添加。
由于我对正则表达式的了解有限,我无法阻止搜索返回所有出现的“混合”值。例如,如果:hiddenField.val = 'mixer, mixon, mixx',则正则表达式始终返回 true,因为所有三个单词都包含“mix”字符。
在此先感谢您的帮助
我需要一个对输入/类型=隐藏字段的值执行“包含”功能的正则表达式。此隐藏字段将唯一值存储在逗号分隔的字符串中。
这是一个场景。
value: "mix" 需要添加到隐藏字段。仅当它不作为逗号分隔值存在时才会添加。
由于我对正则表达式的了解有限,我无法阻止搜索返回所有出现的“混合”值。例如,如果:hiddenField.val = 'mixer, mixon, mixx',则正则表达式始终返回 true,因为所有三个单词都包含“mix”字符。
在此先感谢您的帮助
您可以使用\b
元字符来设置单词边界:
var word = "mix";
new RegExp("\\b" + word + "\\b").test(hidden.value);
演示:http: //jsfiddle.net/ztYff/
更新。为了保护我们在使用变量而不是硬编码时可能出现问题的正则表达式(见下面的注释),我们需要对word
变量中的特殊字符进行转义。一种可能的解决方案是使用以下方法:
RegExp.escape = function(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
演示:http: //jsfiddle.net/ztYff/1/
更新 2.按照@Porco 的回答,我们可以结合正则表达式和字符串拆分来获得另一个通用解决方案:
hidden.value.split(/\s*,\s*/).indexOf(word) != -1;
演示:http: //jsfiddle.net/ztYff/2/
hiddenField.val.split(',').indexOf('mix') >= 0
也可以使用正则表达式(startofstring OR comma + mix + endofstring OR comma):
hiddenField.val.match(/(,|^)mix($|,)/)
hiddenField.val.match(/^(mix)[^,]*/);
怎么样:
/(^|,)\s*mix\s*(,|$)/.test(field.value)
It matches mix
, either if it is at the beginning of a string or at the end or in between commas. If each entry in the list can consist of multiple words, you might want to remove the \s*
.