簡體   English   中英

正則表達式多匹配字符串

[英]Regex multi match on string

我正在嘗試用一個正則表達式匹配多個值。

我想提取標志和值(如果存在),但是我想為用戶提供以多種不同方式鍵入標志的能力。

npm start search
npm start search=test-string
npm start search="test"
npm start search='test'
npm start search="test, test-string"
npm start search=' test,test '

我希望能夠剖析標志和=之后的值,等於之后可以是一個單詞或多個值,並用單引號或雙引號將逗號分隔。

這是我嘗試過的

(^[^=]+)\=([^'"].*)?

(以粗體顯示)是我要匹配的內容,第1組是關鍵字,第2組是搜索值,該值是可選的。

npm開始搜索

npm開始搜索 = 測試字符串

npm開始搜索 =“ 測試

npm start search =' 測試 '

npm start search =“ 測試,測試字符串

npm start search =' 測試,測試 '

我嘗試過使用負向向前和向后,但一直失敗...

您需要將=設為可選。

如果要允許在值周圍使用引號,但不將其包括在第二個捕獲組中,請將引號放在捕獲組之前 ,並使它們成為可選項。 然后匹配捕獲組中除引號外的所有內容。

^([^=\n]+)=?['"]?([^'"\n]*)

演示

在演示中,我刪除了字符串中的引號,因為它們是由Shell解析的,而不是傳遞給npm的。 我還必須將\\n放在[^]這樣它就不會在多行中匹配。

嘗試這個 :

(?<=npm start)([^=\n]+)(?:=?)(?:['"]+)?([^\n\'\"]+)?(?:[^\S\n]?)

https://regex101.com/r/i0aacp/10/

以下應該為您提供標志和值aftr,從值中刪除引號:

 myStr.match (/^npm start ([^\s]+)\s*=?\s*(['"]?[^'"]+?['"]?)\s*?$/i)

或帶引號

myStr.match (/^npm start ([^\s]+)\s*=?\s*([^\s]+)?\s*$/i)

如果您不需要匹配npm start只需簡單地npm start

  myStr.match (/\s*([^\s]+)\s*=?\s*([^\s]+)\s*?$/i)

尚未測試,可能需要更多調整。

暫無
暫無

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

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