繁体   English   中英

javascript-如何使用正则表达式匹配以下字符串?

[英]javascript - How do I use regex to match the following string?

我是regex的新手,并且以前从未使用过它。

我正在尝试匹配以下字符串String A并将其替换为String B

字串A:

+ ANYTHING_NO_SPACES.prototype.ANYTHING_NO_SPACES = function()
{
    ANYTHING
}

字串B:

ANYTHING_NO_SPACES.prototype.function_segments.ANYTHING_NO_SPACES.push(function())
{
    ANYTHING
})

ANYTHING_NO_SPACES表示可以在此处放置任何空格

ANYTHING东西都意味着可以在这里放置任何东西,空格等。

我也想忽略换行符,所以换行符与空格相同,或者什么都不是。

编辑:这是到目前为止我得到的:

(\+ \w+.prototype\.\w+ = function\(\)( |\n){([\S\s]*?)})

我想不出如何完成最后一位..改为串入string b

有关如何完成此操作的任何想法?

您可以按照以下方法进行操作:

var output = input.replace(
  /(^|\n)\s*\+\s*(\w+)\.prototype\.(\w+)\s*=\s*function\(\)\n{([\s\S]+?\n})/g,
  "$1$2.prototype.function_segments.$3.push(function())\n{$4)"
);

该正则表达式中值得注意的一些事项:

  • (^|\\n)是字符串的开头或换行
  • [\\s\\S]匹配包括换行符在内的任何字符
  • [\\s\\S]+? 是非贪婪的,因此它不会一次捕获多个功能
  • 仅当您的代码正确缩进时,此方法才有效:由于未对代码进行解析,因此我们依靠}在行的开头来检测函数的结尾

示范:

 document.getElementById("output").innerHTML = document.getElementById("input").innerHTML.replace( /(^|\\n)\\s*\\+\\s*(\\w+)\\.prototype\\.(\\w+)\\s*=\\s*function\\(\\)\\n{([\\s\\S]+?\\n})/g, "$1$2.prototype.function_segments.$3.push(function())\\n{$4)" ); 
 INPUT: <pre id=input> + ANYTHING_NO_SPACES.prototype.ANYTHING_NO_SPACES = function() { ANYTHING } + blabla.prototype.hop = function() { ANYTHING TOO } </pre> OUTPUT: <pre id=output> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM