我想知道如何提取所有这些参数的值。
我的正则表达式:
([w]+)(s*=s*)(['|"|w])(.+)['|"|w]
应匹配的参数名称和值:
name='John Doe'
name=John Doe
organization=Acme Widgets Inc.
server=192.0.2.62
port='143'
file="payroll.dat"
DOS=HIGH,UMB
DEVICE=C:DOSHIMEM.SYS
DEVICE=C:DOSEMM386.EXE RAM
DEVICEHIGH=C:DOSANSI.SYS
FILES=30
SHELL=C:DOSCOMMAND.COM C:DOS /E:512 /P
当我在regex101.com中运行表达式时,它只找到第一个匹配的参数。在这种情况下为:name='John Doe'
所需输出为name John Doe
我在理解如何在没有偏执和等号的情况下查找和提取参数名称和值时遇到了额外的困难。
试试这个:
(w+)s*=s*['"]?([^'"n]+)
关键字将在捕获组1中(在w
周围不需要[]
(。
没有必要在等号附近建立捕获组。
[^"]?
允许等号后面有一个可选引号。不需要将其放在捕获组中。
([^'"n]+)
然后匹配所有不是另一个引号或换行符的内容。因此,它将捕获所有内容,直到引用或行尾。该值将被放入第2组。
演示
我希望这对你有用:
/^.*?=.*?$/gm
我在以下位置测试模式:https://regexr.com/
var str = `
name='John Doe'
name=John Doe
organization=Acme Widgets Inc.
server=192.0.2.62
port='143'
file="payroll.dat"
DOS=HIGH,UMB
DEVICE=C:DOSHIMEM.SYS
DEVICE=C:DOSEMM386.EXE RAM
DEVICEHIGH=C:DOSANSI.SYS
FILES=30
SHELL=C:DOSCOMMAND.COM C:DOS /E:512 /P`;
console.log( str.match(/^.*?=.*?$/gm).map(str => str.replace(/("|')/g, '').replace(/=/g, ' ') ) )