正则表达式匹配相当复杂的字符串

时间:2017-07-07 05:16:53

标签: javascript regex

任何有关正则表达式的专家,可能会找到这个数据的模式,我正在寻找一个完全匹配的,直到空格,逗号和短划线的模式。以下是我需要匹配的示例数据:

单词,字母数字-PRT-word-number

单词,字母数字-PRT-number

-word:任何大小的单词

- 字母数字:3个字母和最多2个数字,因此XXX#或XXX ##

- 数字:最多3位数,所以#或##或###

-PRT:这里唯一的静态值

注意:除了空格,逗号和短划线之外,没有其他标点符号。

到目前为止有一些接近它的东西,但相当笨拙,并没有涵盖所有基础,我在这里建立它:http://buildregex.com/使用他们的逻辑,它有点工作:

/(?:[^_\ ]+)(?:\ )(?:[^_\ ]+), (?:[^_\ ]+)-PRT-(?:[^_\ ]*)/gi

如果有任何可以帮助改进这一点,那将是受欢迎的

https://regex101.com/r/8cc52u/2

非常感谢

1 个答案:

答案 0 :(得分:1)

以下是一种方法:

/^[a-z]+\s[a-z]+,\s[a-z]{3}\d{1,2}-prt-([a-z]+-){0,1}\d{1,3}$/gi
  • ^:行首
  • [a-z]+:一个或多个字母
  • \s:任何空格字符
  • [a-z]+:一个或多个字母
  • ,:,
  • \s:任何空格字符
  • [a-z]{3}:三个字母
  • \d{1,2}:一位或两位数字
  • -prt-: - prt -
  • ([a-z]+-){0,1}:一个或多个字母后跟 - ,零或一次
  • \d{1,3}:一位,两位或三位
  • $:行尾

示例:https://regex101.com/r/BhS8kM/5

或者,suggested by revo

/^[a-z]+ [a-z]+, [a-z]{3}\d{1,2}-prt-([a-z]+-)?\d{1,3}$/gi

示例:https://regex101.com/r/BhS8kM/7