正则表达式多重匹配字符串
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 start search=test-string
npm 开始 搜索="测试"
npm start search='test'
npm start search="test, test-string"
npm start search=' test,test '
我试过使用负前瞻和后视但总是失败...
您需要将 =
设为可选。
如果您希望在值周围使用引号,但不将它们包含在第二个捕获组中,请将引号放在捕获组之前,并使其成为可选的。然后匹配捕获组中除引号外的任何内容。
^([^=\n]+)=?['"]?([^'"\n]*)
在演示中,我从字符串中删除了引号,因为它们由 shell 解析,没有传递给 npm。我还必须将 \n
放在 [^]
中,这样它就不会跨多行匹配。
从值中剥离引号后,以下内容应为您提供标志和值:
myStr.match (/^npm start ([^\s]+)\s*=?\s*(['"]?[^'"]+?['"]?)\s*?$/i)
或带引号
myStr.match (/^npm start ([^\s]+)\s*=?\s*([^\s]+)?\s*$/i)
如果你不需要匹配npm start
就简单
myStr.match (/\s*([^\s]+)\s*=?\s*([^\s]+)\s*?$/i)
尚未测试,可能需要更多调整。
试试这个:
(?<=npm start)([^=\n]+)(?:=?)(?:['"]+)?([^\n\'\"]+)?(?:[^\S\n]?)
我试图用一个正则表达式匹配多个值。
我想提取标志和值(如果存在),但是我想为用户提供以多种不同方式键入标志的能力。
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 start search=test-string
npm 开始 搜索="测试"
npm start search='test'
npm start search="test, test-string"
npm start search=' test,test '
我试过使用负前瞻和后视但总是失败...
您需要将 =
设为可选。
如果您希望在值周围使用引号,但不将它们包含在第二个捕获组中,请将引号放在捕获组之前,并使其成为可选的。然后匹配捕获组中除引号外的任何内容。
^([^=\n]+)=?['"]?([^'"\n]*)
在演示中,我从字符串中删除了引号,因为它们由 shell 解析,没有传递给 npm。我还必须将 \n
放在 [^]
中,这样它就不会跨多行匹配。
从值中剥离引号后,以下内容应为您提供标志和值:
myStr.match (/^npm start ([^\s]+)\s*=?\s*(['"]?[^'"]+?['"]?)\s*?$/i)
或带引号
myStr.match (/^npm start ([^\s]+)\s*=?\s*([^\s]+)?\s*$/i)
如果你不需要匹配npm start
就简单
myStr.match (/\s*([^\s]+)\s*=?\s*([^\s]+)\s*?$/i)
尚未测试,可能需要更多调整。
试试这个:
(?<=npm start)([^=\n]+)(?:=?)(?:['"]+)?([^\n\'\"]+)?(?:[^\S\n]?)