匹配正则表达式中的内括号表达式
Matching inner parentheses expressions in regex
我想在前端解析 Jinja 函数,如下所示:
{{ some_tag('firstarg', 'secondarg', 'thirdarg', 'fourtharg') }}
但我不知道会有多少参数。那我做了什么?我写了以下正则表达式:
{{'W*some_tag'W*'((['"](.*)['"],'W*){0,}['"](.*)['"]')}}
但是,当我运行此正则表达式时,我得到的输出如下:
matches = regex.exec("{{ some_tag('firstarg', 'secondarg', 'thirdarg', 'fourtharg') }}")
matches:
"{{ some_tag('firstarg', 'secondarg', 'thirdarg', 'fourtharg')}}",
"'firstarg', 'secondarg', 'thirdarg'",
"'firstarg', 'secondarg', 'thirdarg'",
"'fourtharg'"
但这不是我想要的。我需要一种方法来匹配内括号,以便我只有对应于firstarg
、secondarg
、thirdarg
和fourtharg
的变量。
我怎么得到这个?
MDN 示例使用循环来查找与正则表达式的连续匹配项。
使用参数在单引号之间且不存在其他单引号的语法的示例:
var re = /[^']*'([^']*)'/g // remember single quoted match
var str = "{{ some_tag('firstarg', 'secondarg', 'thirdarg', 'fourtharg') }}"
var args = []; // args array
var match; // match array
while(match = re.exec(str))
{ args.push(match[1]);
}
args; // [firstarg,secondarg,thirdarg,fourtharg]
如果您需要确保在some_tag
之后获得这些参数,则可以在replace
方法中利用回调方法:
var s = "{{ some_tag('firstarg', 'secondarg', 'thirdarg', 'fourtharg') }}";
var res = [];
s.replace(/some_tag'(([^()]*)')/, function(m, g1) {
var splt = g1.replace(/^'(['s'S]*)'$/, '$1').split(/','s*'/).map(function (t) { res.push(t); });
})
document.body.innerHTML = JSON.stringify(res, 0, 4);
您将整个some_tag(...)
与some_tag'(([^()]*)')
匹配(或者 - 如果值可以有 (
和 )
- 与 some_tag'((['s'S]*)')'s*}}
),然后删除初始和最终'
并将组 1 拆分为 '
+ 空格? + '
。
在Javascript中,没有办法用一个正则表达式来做到这一点。因此,提取最里面的括号,不带第一个和最后一个引号,然后用', '
拆分第一个捕获组。
var s = "{{ some_tag('firstarg', 'secondarg', 'thirdarg', 'fourtharg') }}";
var re = /{{'s*('w+)'s*'('s*['"]((?:[^'"]*['"]'s*,'s*["'])*[^"']*)['"]'s*')'s*}}/g;
var results = [];
while(m = re.exec(s)) {
results.push({'func':m[1], 'param':m[2].split(/['"]'s*,'s*['"]/)})
}
console.log(results);
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 如何使用正则表达式(正则表达式)验证 12 小时时间