Oli*_*i C 5 javascript regex parsing match capturing-group
我试图从字符串形式的对象中挑选出所有值。我已经创建了正则表达式,但我仍然遇到无法删除引号并碰壁的问题......
这是我得到的结果与期望结果的比较的代码:
const regex = /(?:"([^"]+)\")|([^=",{}.]+)/g
const string = 'obj{a="0",b="1",domain="a-ss.test.io:666",f="g",range="3.594e-04...4.084e-04"}'
const matches = string.match(regex)
console.log(matches)
Run Code Online (Sandbox Code Playgroud)
这是结果数组:
[
"obj",
"a",
"\"0\"",
"b",
"\"1\"",
"domain",
"\"a-ss.test.io:666\"",
"f",
"\"g\"",
"range",
"\"3.594e-04...4.084e-04\""
]
Run Code Online (Sandbox Code Playgroud)
虽然我想要的结果是:
[
"obj",
"a",
"0",
"b",
"1",
"domain",
"a-ss.test.io:666",
"f",
"g",
"range",
"3.594e-04...4.084e-04"
]
Run Code Online (Sandbox Code Playgroud)
有谁知道如何从返回的每个数组值中删除引号?
您需要在结果中获取完整的匹配值,因为String#match包含该/g标志的正则表达式会丢失所有捕获。看到String#match返回:
其
Array内容取决于全局 (g) 标志是否存在,或者null是否未找到匹配项。
- 如果
g使用该标志,则将返回与完整正则表达式匹配的所有结果,但不包括捕获组。- 如果
g未使用该标志,则仅返回第一个完整匹配项及其相关捕获组。在这种情况下,将返回与(具有一些额外属性的数组)match()相同的结果。RegExp.prototype.exec()
您想要获取第 1 组或第 2 组值,因此请要求引擎仅返回它们:
const regex = /"([^"]+)"|([^=",{}.]+)/g
const string = 'obj{a="0",b="1",domain="a-ss.test.io:666",f="g",range="3.594e-04...4.084e-04"}'
const matches = Array.from(string.matchAll(regex), x => x[1] || x[2])
console.log(matches)Run Code Online (Sandbox Code Playgroud)