我正试图通过RegEx完成这些任务:
经过RegEx Wiki和其他RegEx问题后,我得到以下表达式:
/^([A-Z])([A-Z0-9 ]){0,29}$/i
尽管这成功完成了任务1-4,但我无法在任务5和6上找到任何东西。
注意:我正在将Javascript用于RegEx。
答案 0 :(得分:3)
字符串顺序应不超过一个空格。
匹配空格时,负向查找另一个空格。
字符串不能以空格结尾。
匹配空格时,字符串末尾也为负值:
/^([A-Z])([A-Z0-9]| (?! |$)){0,29}$/i
^^^^^^^^^
答案 1 :(得分:0)
此正则表达式适用于Ruby。我想Javascript也一样。
r = /^(?!.{31})\p{Alpha}(?:\p{Alnum}| (?! ))*(?<! )$/
"The days of wine and 007" =~ r #=> 0 (a match)
"The days of wine and roses and 007" =~ r #=> nil (too long)
"The days of wine and 007" =~ r #=> nil (two consecutive spaces)
"The days of wine and 007!" =~ r #=> nil ('!' illegal)
\p{}
构造匹配Unicode字符。
正则表达式可以在自由空间模式下表示为以下形式(以记录其组成部分)。
/
^ # beginning of string anchor
(?!.{31}) # 31 characters do not follow (neg lookahead)
\p{Alpha} # match a letter at beg of string
(?: # begin a non-capture group
\p{Alnum} # match an alphanumeric character
| # or
[ ] # match a space
(?![ ]) # a space does not follow (neg lookahead)
)* # end non-capture group and execute >= 0 times
(?<![ ]) # a space cannot precede end of string (neg lookbehind)
$ # end of string anchor
/x # free-spacing regex definition mode
请注意,空格是从自由空间模式下定义的正则表达式中剥离的,因此必须保留要保留的空格。我已经将每个字符放在一个字符类([ ]
中,但是也可以使用\s
(尽管它与空格,制表符,换行符和其他一些字符匹配,这应该没问题)