簡體   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