正则表达式匹配某些字符串模式

时间:2016-11-21 06:46:19

标签: javascript regex

我有nam1|val1nam1|val1,name2|val2nam1|nam1|val1,等字符串模式。我必须有正则表达式才能找到给定的模式是真还是假

输入和输出将是

"nam1|val1" -> true
"nam1|val1,name2|val2"  -> true
"nam1|" -> false
"nam1|val1," -> false
"nam1|val1,name" -> false
"nam1|val1,name|" -> false

2 个答案:

答案 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函数在分割的字符串元素上应用正则表达式:

&#13;
&#13;
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;
&#13;
&#13;