使用 Regex 匹配函数参数

Match function parameters with Regex

我创建了一个允许捕获函数参数的正则表达式。

参数之间用,

字符分隔

您可以在 'lorem, impum'

等参数中包含字符

正则表达式 returns 只匹配最后一个。

我的正则表达式:

\s*(\'.+\'|\".+\"|[^,]+)?(?:\s*,?\s*(\'.+\'|\".+\"|[^,]+))*

函数参数

111111111111,'222222222',"33333333333333"

LInk 到正则表达式示例:https://regex101.com/r/fdRJ92/2

/\(?([^,\)]+)[\),]?/怎么样:

  • 匹配一个可选的开头'('(需要捕获第一个参数)
  • 捕获不是 (',' 或 ')' )
  • 的多个字符
  • 以“,”或“)”结尾(最后一个参数需要)

请注意,此正则表达式确实仅假定简单的字符串或数字。如@MonkeyZeus 所述,它将在字符串上失败。

如果在参数句子中使用逗号,您就会遇到麻烦,因为正则表达式查找标记,而不是标记上下文(分隔符或标点符号?)。 您可以尝试用可识别的序列交换标点逗号,然后拆分 arg 列表,然后将序列改回逗号。

示例位于 https://regex101.com/r/xTkocI/1

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'