如何使用Regex捕获样本字符串上的所有参数?我尝试在https://regex101.com/上使用(\ @ \ w + | \ w +)模式,但它返回样本字符串上的所有单词,这不是我所期望的。
.selector(@background, height, font "font-family, font family", @width : 10px, "red");
expected output should capture 5 parameters:
1. @background
2. height
3. font "font-family, font family"
4. @width : 10px
5. "red"
我在结合正则表达方面遇到了困难,我花了一个小时来弄清楚这就是为什么我决定寻求帮助。
答案 0 :(得分:2)
首先,我会在括号之间提取有趣的部分,然后我会读取内部参数:
var args = str.match(/\(([^\)]+)\)/)[1].match(/[^,"]+("[^"]+")*/g)
结果:
第二部分([^,"]+("[^"]+")*
)的想法是明确地在引号之间包含部分。
答案 1 :(得分:0)
^.*?\(|,(?=(?:[^"]*"[^"]*")*[^"]*$)|\).*$
您可以按此拆分并从结果中删除empty string
。参见演示。
答案 2 :(得分:0)
这是一个一体的正则表达式:
/(?<=[,\(])(?:\s*)([^,"]*(?<dq>")?(?(dq)[^"]+"[^\(\),]*))(?:\s*)/g
说明:
(?<=[,\(])
(?:\s*)
(更好)。见https://regex101.com/r/pC9fB6/1结果。
注意:在所有正则表达式引擎(例如JavaScript)不支持后面的注释背后的注释中发现了破坏性。一种可能的解决方案是将lookbehind断言的字符类[,\(]
放在非捕获的空白组中:(?:[,\(]\s*)
。结果几乎相同,编号捕获的匹配完全相同。