【问题标题】:Javascript regex ends with patternJavascript 正则表达式以模式结尾
【发布时间】:2014-10-27 11:27:47
【问题描述】:

我正在尝试在 javascript 中编写一个正则表达式来识别在 json 中找到的任意 javascript 函数的字符串表示,即。像

{
  "key": "function() { return 'I am a function'; }"
}

识别开始很容易,但我不知道如何识别结束双引号,因为该函数也可能包含转义的双引号。到目前为止,我最好的尝试是

/"\s*function\(.*\)[^"]*/g

如果函数字符串中没有双引号,则效果很好。 json 键值的结尾将以双引号和随后的逗号或右括号结尾。有没有办法检索所有字符(包括换行符?),直到出现否定模式,例如

not "/s*, and not "/s*}

...或者我是否需要在没有正则表达式的情况下采取完全不同的方法?

这是我正在使用的当前测试数据: http://regexr.com/39pvi

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    好像你想要这样的东西,

    "\s*function\(.*\)(?:\\.|[^\\"])*
    

    它还匹配中间的 \" 转义双引号。

    DEMO

    【讨论】:

    • 如果函数体中有\n,则它不起作用:"function() { return 'hello \n fun ction stuff'; }"
    • 它有效,见regex101.com/r/oY5jU1/1[^"\\]* 也会匹配换行符。
    • 如果此() 块中存在任何\n,那么他需要更改正则表达式,例如"\s*function\([\S\s]*?\)(?:[^"\\]|\\")*
    • 您可以切换这两个部分并省略 \\:"\s*function\(.*\)(?:\\"|[^"])*"。见regex101.com/r/oY5jU1/3
    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多