我对正则表达式有点新意,以前还没有使用它。
我正在尝试匹配以下字符串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
关于如何完成的任何想法?
答案 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>