繁体   English   中英

正则表达式:如果第一个字符是 '%' 或字母数字然后

[英]RegEx: If first character is '%' or alphanumeric then

在 nodejs 中,我必须遵循模式

(/^(>|<|>=|<=|!=|%)?[a-z0-9 ]+?(%)*$/i

仅匹配字母数字字符串,带有可选的后缀和前缀以及一些特殊字符。 它的工作正常。

现在我只想在第一个字符是字母数字(不区分大小写)或 % 时才匹配最后一个 '%'。 然后它可选地允许,否则它不应该匹配。

例子:

应该匹配:

>test
!=test
<test
>=test
<=test
%test
test
%test%
test%

应该匹配的示例:

<test% <-- its now matching, which is not correct
<test< <-- its now **not** matching, which is correct

有任何想法吗?

你可以在^之后添加一个负面的前瞻

/^(?![^a-z\d%].*%$)(?:[><]=?|!=|%)?[a-z\d ]+%*$/i
  ^^^^^^^^^^^^^^^^^  

请参阅正则表达式演示 详情

  • ^ - 字符串的开始
  • (?![^az\\d%].*%$) - 如果开头是字母数字或%以外的字符,结尾是% ,则匹配失败
  • (?:[><]=?|!=|%)? - 可选匹配<><=>=!=%
  • [az\\d ]+ - 一个或多个字母数字或空格字符
  • %* - 零个或多个%字符
  • $ - 字符串结尾

您可能会使用替代| 匹配任一选项。

^(?:[a-z0-9%](?:[a-z0-9 ]*%)?|(?:[<>]=?|!=|%)?[a-z0-9 ]+)$
  • ^字符串开始
  • (?:非捕获组
    • [a-z0-9%]匹配字符类中列出的一个
    • (?:[a-z0-9 ]*%)? 可选匹配重复 0+ 次的任何字符类,后跟%
    • | 或者
    • (?:[<>]=?|!=|%)? 可选择匹配其中一个选项
    • [a-z0-9 ]+匹配任意字符类的 1+ 次
  • )关闭非捕获组
  • $字符串结尾

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM