2014-10-08 29 views
0
var longstr = new Array(30000).join("a"); 
longstr.replace(/(.*?)\s*$d/, "$1"); 

我有上面的代码来修剪字符串末尾的空白。上面的代码需要很多时间才能执行(〜3秒),$符号之后的字符“d”是导致瓶颈的原因,删除“d”可以解决问题。

我需要知道如果字符出现在$符号之后会发生什么。

+1

'd'与文字字符'd'匹配。不知道为什么会有这样的性能影响。 – jmar777 2014-10-08 14:00:57

+2

也许引擎无法优化,从字符串的末尾开始查找,而不是从头开始查找。如果从头开始,它将逐字检查从位置0开始的字符串的每个子字符串,无论它是否匹配'(。*?)\ s * $'。即给定'aaaaa',它会测试'a','aa','aaa','aaaa','aaaaa'。 – 2014-10-08 14:02:40

+0

@FelixKling似乎可信:) – jmar777 2014-10-08 14:04:02

回答

3

不要紧,什么是当前后$(未逃脱字面美元),因为它标志着线和没有结束行结束后可以有

相关问题