簡體   English   中英

正則表達式匹配0個或確切的字符數

[英]Regular expression match 0 or exact number of characters

我想用0或2個連續的破折號(而不是1)匹配JavaScript中的輸入字符串,即不在范圍內。

如果字符串是:

  • -g:"apple" AND --projectName:"grape" :它應該與--projectName:"grape"匹配。
  • -g:"apple" AND projectName:"grape" :它應該匹配projectName:"grape"
  • -g:"apple" AND -projectName:"grape" :它不應該匹配,即返回null。
  • --projectName:"grape" :它應該匹配--projectName:"grape"
  • projectName:"grape" :它應該與projectName:"grape"匹配。
  • -projectName:"grape" :它不應該匹配,即返回null。

為了簡化此問題(考慮此示例),RE應該匹配前面的0或2個破折號,然后是后面的任何破折號。 我會找出其余的。 問題仍然歸結為匹配0或2的破折號。

  1. 使用-{0,2}匹配0、1、2破折號。
  2. 使用-{2,}匹配2個或更多的破折號。
  3. 使用-{2}僅匹配2個破折號。

如何匹配0或2次出現?

回答

如果在空格上拆分“類似單詞”的模式,則可以使用此正則表達式,並且所需的值將在第一個捕獲組中:

(?:^|\s)((?:--)?[^\s-]+)
  • \\s是任何空格字符(制表符,空格,換行符...)
  • [^\\s-]除了空格字符或-

問題再次是錨定正則表達式,以便相關部分不是完全可選的:錨定^或強制空格\\s扮演了這個角色。


我們想做什么

基本上,您要檢查表達式(兩個破折號)是否存在,因此可以使用? 運營商:

(?:--)?

“要么兩個,要么都不”, (?:...)是一個非捕獲組。

避免混亂

要匹配“零個或兩個破折號”,因此,如果這是你的整個正則表達式它總是會找到一個匹配:一個空字符串,在---foobar ......會是怎樣的比賽,這些字符串是一個空字符串,但是正則表達式將返回一個匹配項。

這是造成誤解的常見原因,因此請記住以下規則: 如果您的正則表達式中的所有內容都是可選的,它將始終找到匹配項。

如果您只想在整個字符串由零或兩個破折號組成的情況下返回匹配項,則需要錨定正則表達式:

^(?:--)?$

^$分別匹配字符串的開頭和結尾。

a(-{2})?(?!-)

這以“ a”為例。 這將匹配,后跟可選的兩個破折號。

編輯:

根據您的示例,這應該有效

(?<!-)(-{2})?projectName:"[a-zA-Z]*"

編輯2:我認為Javascript有問題。

嘗試這個:

[^-](-{2})?projectName:"[a-zA-Z]*"

正則表達式可視化

Debuggex演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM