javascript - 我怎样才能加快我的正则表达式?

标签 javascript regex node.js

我正在编写一个脚本来将我的内容的所有 URL 更改到一个新位置。

var regex = /.*cloudfront.net/
var pDistro = "newDistro.cloudfront.net/"

for(var i=0;i<strings.length;i++){
    strings[i] = strings[i].replace(regex,pDistro);
}

我正在执行 replace 的字符串平均每个大约 140 个字符。它们是遵循以下格式的网址:https://[thing to replace].cloudfront.net/[something]/[something]/[something]

但是这个操作非常慢,处理一个平均大小的数组大约需要 4.5 秒。

为什么这么慢?我怎样才能让它更快?

如果这个问题更适合 codereview stack exchange 或其他一些网站,请告诉我,我会把它移到那里。

编辑:

数据,因为它出现在我从中提取的数据库中,似乎是 140 个字符。在拉取过程中,发生了一些虚拟化并在字符串上附加了 400 个以上的字符,所以正则表达式花费这么长时间也就不足为奇了。

正如其他人指出的那样,140 个字符的字符串循环花费的时间要少得多。

故事的寓意:“确保您拥有的数据符合您的预期”和“如果您的正则表达式花费的时间太长,请使用更小的字符串和更具体的正则表达式(即无通配符)”

最佳答案

也许它会像这样运行得更快一些:

https:\/\/[a-zA-Z0-9]+\.cloudfront\.net

通常,您的字符集越排他,正则表达式的运行速度就越快。


感谢@sbedulin 提供 jsperf链接

关于javascript - 我怎样才能加快我的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32026815/

相关文章:

javascript - 表单验证和所有后续代码不执行

javascript - 用于替换 double = mark 中所有内容的 JS 和正则表达式

Java:用其他不同的字符替换一组字符

regex - 如何强制正则表达式捕获最大的匹配项?

mysql - 如何使用准备好的语句使用数据数组更新多列?

javascript - Paypal Express Checkout - 授权未出现在仪表板中

javascript - 随机数,淡入答案

javascript - 如何将获取的API的一部分添加到组件定义的数组中

javascript - 在 Sails 中显示 PostController.js 发送的字符串变量的 ejs 代码

linux - Selenium grid ubuntu主机无法在Windows guest 中创建 Node