javascript - 如何为不确定长度的参数形成 JavaScript 正则表达式

标签 javascript regex

我正在尝试使用 javascript 解析这样的字符串:

var mystr = "param1('stringValue'), param2(IntegerValue IntegerValue)";

最后我需要获取每个参数名称(param1 和 param2)和值(一个字符串值或两个整数值)。

但是,原始字符串可以有任意数量的参数,例如:

"param1('stringValue')"

"param1('stringValue'), param2(IntegerValue IntegerValue), param2(IntegerValue IntegerValue)"

要求:

  1. 每个参数之间有一个逗号,值位于括号内。
  2. 括号内可以是一个字符串值,也可以是两个中间有空格的整数。
  3. 可以有任意数量的参数(但至少 1 个)

最佳答案

var str = "param1('stringValue'), param2(1 2), param2(34 555)";
var re = /(\w+)\((?:'([^']+)'|(\d+) (\d+))\)/g;
var a = [], match, value;
while(match = re.exec(str)) {
    if (match[2] != null) value = match[2];
    else value = [parseInt(match[3]), parseInt(match[4])];
    a.push([match[1], value]);
}
a; // [["param1", "stringValue"], ["param2", [1, 2]], ["param2", [34, 555]]]

字符串不应有 '其中的符号。如果您想要完全万无一失的解决方案,您需要放弃正则表达式并使用一些解析器。

可以使用[^']|(<?\\(?:\\\\)*)'之类的东西来解析转义字符串。 ,但是js中的正则表达式不支持look-behinds,而且AFAIR变长look-behinds根本不支持。

关于javascript - 如何为不确定长度的参数形成 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931450/

相关文章:

javascript - 如何使用 angular1 让图像在点击时显示在前面/后面?

javascript - jsPdf 不适用于 css

javascript - 尝试匹配/测试完全合格的 sub.domain.com :1000 or 127. 0.0.1:1000

javascript - 匹配精确句子和单个单词的正则表达式?

java - 从 MySQL 表中检索正则表达式模式

javascript - 如何使用 Javascript 将 CSS 添加到新窗口?

javascript - Jquery $.post脚本运行3次(多次INSERT)

javascript - 字符串和数字连接

python - 像这样的字符串的正则表达式

c++ - 捕获重复组的正则表达式