正则表达式提取带有嵌套函数(javascript)的函数表示法
Regex to extract function notation with nested functions (javascript)
我正在尝试从javascript中的字符串中提取函数表示法(所以我不能使用lookback),这里有一些例子:
- f(2) 应匹配 f(
- f(10)g(8) 应匹配 f( 和 g(
- f(2+g(3)) 应匹配 f( 和 g(
- f(2+g(sqrt(10))) 应该匹配 f( 和 g(
- f(g(2)) 应匹配 f( 和 g(
现在我正在使用
/'b[a-z]'([^x]/g
因为我不想在它是一串字母(例如 sqrt)时才匹配,只有当只有一个字母然后是一个括号时。我遇到的问题是列表中的最后一个(嵌套函数)。( 不是 ''b 捕获的一部分,因此不匹配。
我目前的计划是在每个(使用类似的东西)后添加一个空格
input = input.replace(/'([^'s]/g, '( ');
它拆分了嵌套函数,以便 ''b 发挥作用 [变为 f( g( 3))],但在我开始弄乱输入字符串之前,我想我会在这里问是否有更好的方法。显然正则表达式不是我超级强的东西,但我正在努力学习,所以一个带有答案的解释将不胜感激(尽管我会采取任何我可以谷歌自己的指示!我不完全确定在这里搜索什么。
这里的要点是,[^x]
是一个否定的字符类,它仍然匹配,在(
后使用符号,并防止重叠匹配。要检查下一个字符是否未x
,请使用前瞻:
'b[a-z]'((?!x)
^^^^^
查看正则表达式演示
也许,只有当x
是f()
或g()
中唯一的字母时,您才希望匹配失败:
'b[a-z]'((?!x'))
从 Regular-expressions.info:
如果你想匹配没有其他东西的东西,消极的展望是必不可少的。在解释 [字符类][4] 时,本教程解释了为什么不能使用否定字符类来匹配不后跟
u
的q
。负前瞻提供了解决方案:q(?!u)
。负前瞻构造是一对括号,左括号后跟问号和感叹号。
我认为你只需要删除[^x]:
"f(g(2))".match(/'b[a-z]'(/g)
// ["f(", "g("]
相关文章:
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- JavaScript对象,构造函数,点表示法
- 表示改变状态的函数的Redux字
- Javascript regexObj.exec()表示TypeError:pattern.exec不是函数
- javascript函数表示这是未定义的
- 在对象文字上调用函数,由字符串 - JavaScript 表示
- Javascript 使用天花板函数表示小于 1 的值
- node.js 中的匿名函数和 => 表示法有什么区别
- AJAX:PHP 函数返回 1,但“成功”部分表示它返回 0
- 使用冒号表示函数中的字符串
- 正则表达式提取带有嵌套函数(javascript)的函数表示法
- 原型函数和 json 表示法函数之间的区别
- 如何编写递归函数来获取表示每个值排列集的数组
- 获取构造函数函数的最佳方式是在JavaScript中使用带名称空间的字符串表示
- 如何在JS中获取表示函数的属性名
- 在JavaScript点表示法中使用函数参数
- 什么's表示函数使用'自变量'对象
- 使用javascript对象文字表示法定义函数
- Javascript对象文字表示法,使用函数
- JavaScript 中的一些函数表示法与 jQuery