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

时间:2017-01-02 11:53:42

标签: javascript 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

关于如何完成的任何想法?

1 个答案:

答案 0 :(得分:1)

以下是您可以这样做的方法:

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>