使用 Regex 匹配函数参数
Match function parameters with Regex
我创建了一个允许捕获函数参数的正则表达式。
参数之间用,
字符分隔
您可以在 'lorem, impum'
等参数中包含字符 、
正则表达式 returns 只匹配最后一个。
我的正则表达式:
\s*(\'.+\'|\".+\"|[^,]+)?(?:\s*,?\s*(\'.+\'|\".+\"|[^,]+))*
函数参数
111111111111,'222222222',"33333333333333"
LInk 到正则表达式示例:https://regex101.com/r/fdRJ92/2
/\(?([^,\)]+)[\),]?/
怎么样:
- 匹配一个可选的开头'('(需要捕获第一个参数)
- 捕获不是 (',' 或 ')' )
的多个字符
- 以“,”或“)”结尾(最后一个参数需要)
请注意,此正则表达式确实仅假定简单的字符串或数字。如@MonkeyZeus 所述,它将在字符串上失败。
如果在参数句子中使用逗号,您就会遇到麻烦,因为正则表达式查找标记,而不是标记上下文(分隔符或标点符号?)。
您可以尝试用可识别的序列交换标点逗号,然后拆分 arg 列表,然后将序列改回逗号。
var rx = /(?:^|,)\s*((('|").*?(?<!\)())|(\d?\.?\d+))/g;
var str = `"21312\'\"3123\"", 111111111111,'222222\'222',"333333333,33333", 1234, .123, 0.3, '454'`;
var match;
while (match = rx.exec(str)) console.log(match[1]);
输出
"21312\'\"3123\""
111111111111
'222222\'222'
"333333333,33333"
1234
.123
0.3
'454'
我创建了一个允许捕获函数参数的正则表达式。
参数之间用,
字符分隔您可以在 'lorem, impum'
等参数中包含字符 、正则表达式 returns 只匹配最后一个。
我的正则表达式:
\s*(\'.+\'|\".+\"|[^,]+)?(?:\s*,?\s*(\'.+\'|\".+\"|[^,]+))*
函数参数
111111111111,'222222222',"33333333333333"
LInk 到正则表达式示例:https://regex101.com/r/fdRJ92/2
/\(?([^,\)]+)[\),]?/
怎么样:
- 匹配一个可选的开头'('(需要捕获第一个参数)
- 捕获不是 (',' 或 ')' ) 的多个字符
- 以“,”或“)”结尾(最后一个参数需要)
请注意,此正则表达式确实仅假定简单的字符串或数字。如@MonkeyZeus 所述,它将在字符串上失败。
如果在参数句子中使用逗号,您就会遇到麻烦,因为正则表达式查找标记,而不是标记上下文(分隔符或标点符号?)。 您可以尝试用可识别的序列交换标点逗号,然后拆分 arg 列表,然后将序列改回逗号。
var rx = /(?:^|,)\s*((('|").*?(?<!\)())|(\d?\.?\d+))/g;
var str = `"21312\'\"3123\"", 111111111111,'222222\'222',"333333333,33333", 1234, .123, 0.3, '454'`;
var match;
while (match = rx.exec(str)) console.log(match[1]);
输出
"21312\'\"3123\""
111111111111
'222222\'222'
"333333333,33333"
1234
.123
0.3
'454'