繁体   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