[英]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]?)
以下應該為您提供標志和值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.