[英]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.