【问题标题】:split string of chain functions with reg-exp使用正则表达式拆分链函数字符串
【发布时间】:2014-10-12 08:54:32
【问题描述】:

我在 StackOverflow 上四处寻找,但找不到答案!

无论如何,我想知道如何使用正则表达式在 JavaScript 中获得关注。

我有一个字符串

bla().func1($(ele).attr("data")).func2.func3("test")... ;

我想从给定的字符串中提取 func1, func2, func3...,有人有如何做到这一点的示例吗?

请记住,函数名称会发生​​变化,因此它们不是 func1、func2 ... 它们可以是 load、past、moon ... 任何东西

【问题讨论】:

  • 您想要func1func2 而不是attr?那会很棘手。您还需要处理blah()["func1"](...) 的案例吗?
  • 嗨 T.J.克劳德......不是int。在 blah() 中只是与 blah 相关的基本函数,例如 func1, func2 ...欢呼 c_bb
  • 你试过什么正则表达式?你有什么不明白的?
  • hi gp ...尝试了一些不同的正则表达式,但正则表达式不是我的强项,我似乎无法得到正确的公式...欢呼c_bb
  • 其实,为什么func2 因为那不是函数调用而是属性访问。

标签: javascript regex parsing


【解决方案1】:

试试这个:

var str = 'bla().func1($(ele).attr("data")).func2("test")';
alert(str.split(/(?:\.)\w+\d+(?=\()/g));

这是小提琴: http://jsfiddle.net/cv6avhfb/3/

此代码会将字符串分成几部分,同时将子字符串用作分隔符,例如 '.func1('、'.func2('、'.abc3(' 等。如果函数名称具有不同的结构,您只需更改\w+\d+ 正则表达式的一部分。

这是这段代码的结果:

bla(),($(ele).attr("data")),("test")

如果您想进一步了解 javascript 中的正则表达式: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

【讨论】:

  • 嗨,Nefario 博士……函数名称不是必需的 func(somthing)……可以加载、强制转换等等,并且一直在变化……所以它可能是blah().test().moon("whatever") ...欢呼c_bb
  • 嗨,Nefario 博士……当我这样做时 var str = 'bla().test($(ele).attr("data")).load("test")'; alert(str.split(/(?:\.)\w+(?=()/g)); 我得到 bla(),($(ele),("data")),("test") 和不幸的是,这不是一个有用的输出.. 抱歉.. 无论如何感谢您的调查... 干杯 c_bb
  • 你搜索的结果是什么?
【解决方案2】:

反复删除最里面的括号表达式:

var str = 'bla().func1($(ele).attr("data")).func2.func3("test")... ';
var expression = /\([^(]*?\)/g;
 
while (expression.test(str)) { str = str.replace(expression, ''); }

document.write(str.split('.').slice(1).join(' '));

但是,您不应该这样做(为什么要这样做?)。 JS 应该由 JS 解析器解析。例如,如果有一个包含括号的字符串文字,上述内容将惨遭失败。您应该使用 Esprima 对其进行解析并分析生成的解析树。

【讨论】:

    猜你喜欢
    • 2017-02-23
    相关资源
    最近更新 更多