regexp javascript简化

时间:2018-03-07 23:34:25

标签: javascript regex

^(all|contact|all,contact|contact,all)$

不允许all,allcontact,contactall,contact,all等。

我需要能够拥有相同的模式,但我希望减少因为我将来可能会有更多的元素并且找到所有可能的组合将是困难的。

例如有3个元素 ^(all|contact|another|all,contact|contact,all|all,another|another,all|all,another,contact|all,contact,another|contact,all,another|contact,another,all|another,all,contact|another,contact,all)$

它应该接受用逗号分隔的一个单词或多个单词,每个单词只出现一次。感谢先进的帮助。

2 个答案:

答案 0 :(得分:2)

有点类似于regexlike,但是split()字符上只有,并且检查结果数组的唯一性会不会更容易,也可能更高效?

这可能会更强大,更容易维护,特别是如果你有一个严重最小化/难以阅读的正则表达式,并希望添加更多的单词。

答案 1 :(得分:1)

您可以使用

 /^(?!.*\b(\w+)\b.*\b\1\b)(?:another|contact|all)(?:,(?:another|contact|all))*$/

请参阅regex demo

<强>详情

  • ^ - 字符串的开头
  • (?!.*\b(\w+)\b.*\b\1\b) - 如果没有匹配就会出现负面预测 在除了换行符之外的任何0+字符之后立即有一个完整的单词也会出现在除了换行符之外的任何0 +字符的另一个字符之后
  • (?:another|contact|all) - 三种选择之一
  • (?:,(?:another|contact|all))* - 重复0次以上:
    • , - 逗号
    • (?:another|contact|all) - 三种选择之一
  • $ - 字符串结束。