我有nam1|val1
,nam1|val1,name2|val2
,nam1|
和nam1|val1,
等字符串模式。我必须有正则表达式才能找到给定的模式是真还是假
输入和输出将是
"nam1|val1" -> true
"nam1|val1,name2|val2" -> true
"nam1|" -> false
"nam1|val1," -> false
"nam1|val1,name" -> false
"nam1|val1,name|" -> false
答案 0 :(得分:2)
非常简单:^\w+\|\w+(,\w+\|\w+)*$
第一部分^\w+\|\w+
希望确保字符串以至少1个已完成的 name|value
对开头。
然后第二部分(,\w+\|\w+)*
表示只要第一对和所有后续对之间有逗号,相同的模式可以无限重复。 (虽然,星号量化了模式的第二部分根本不会发生。)
最后,$
表示字符串必须与此模式匹配。 (即,此模式不仅可以匹配部分字符串。由于^
和$
,它必须与整个字符串匹配。)
要为javascript格式化此模式,只需在两端添加正斜杠,因此:/^\w+\|\w+(,\w+\|\w+)*$/
模式不应该需要任何标记。
值得注意的是,如果您需要匹配\w
字符范围之外的更复杂的名称/值,那么您应该用\w
替换所有[Some Character Set(s)]
。< / p>
答案 1 :(得分:2)
如果要检查多个对,可以使用every
函数在分割的字符串元素上应用正则表达式:
isValidPairs = function(str) {
return str.split(',').every(function(elt) {
return /^\w+\|\w+$/.test(elt);
});
}
pairsArr = ["nam1|val1", "nam1|val1,name2|val2", "nam1|", "nam1|val1,", "nam1|val1,name", "nam1|val1,name|"];
pairsArr.forEach(function(str) {
console.log('%s: %s:', str, isValidPairs(str));
});
&#13;