【问题标题】:Regex match everything between dot '.' and close brace '('正则表达式匹配点 '.' 之间的所有内容。和大括号'('
【发布时间】:2016-02-03 16:59:41
【问题描述】:

我有myObject.myFunction(),我想在正则表达式中匹配myFunction。如果我想匹配两个字符串之间的所有内容,表达式 abc(.*)def 有效;所以var str = 'abc test def';str.match(/.(.*)def/) 会按预期返回["abc test def", " test "]。但是表达式.(.*)( 不起作用。我想在我的崇高文本中添加 Javascript 语法 2。谢谢。

【问题讨论】:

    标签: javascript regex sublimetext2 syntax-highlighting


    【解决方案1】:

    但是表达式 .(.*)( 不起作用。

    因为. 是正则表达式中的特殊字符。要匹配文字 .,请将其转义:\.

    ( 也很特殊,所以你也需要转义它:

    var str = "/* Some function call */ myObject.myFunction() /* stuff */";
    var match = str.match(/\.(.*)\(/);
    document.body.innerHTML = match[1];

    由于.* 是一个贪婪的子模式,它匹配到最后一个(。您可以使用否定字符类[^(]* 来匹配第一个(

    var str = "/* Some function call */ myObject.myFunction() { var str = \"String ()\";} /* stuff */";
    document.body.innerHTML += str.match(/\.([^(]*)/)[1] + "<br/>";
    document.body.innerHTML += str.match(/\.(.*)\(/)[1];

    【讨论】:

    • OP 应该记住,使用正则表达式来解析这样的编程语言是愚蠢的差事。例如,/\.(.*)\(/ 将匹配任何用 cmets 编写的“函数调用”或以下 .myFunction("test with a parenthesis("
    • 是的,不适合任何需要超过 90% 的解决方案。通常对于一些简单的语法突出显示“足够好”,但即便如此,正则表达式也只是解决方案的一部分。
    • 绝对。我只是想在这里做一个笔记,以防 OP 试图做的不仅仅是语法高亮。 :) 好答案
    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2020-01-20
    • 2011-09-06
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多