javascript - 正则表达式匹配慢

标签 javascript regex node.js filesystems

我尝试让 Nodejs 应用程序使用 ajax 上传超过 2mb 的文件,
客户端我使用FileReader api来保存base64,然后通过FormData传递。

我的问题是像下面这样的服务器端代码太慢,我把 console.log 尝试找到哪一部分,当上传更大尺寸的文件时,似乎卡在正则表达式match ..
有什么建议如何改进这个吗?

https://regex101.com/r/qS2lB2/1

...
console.log(image.data_base64);  
// 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvd ...
var matches = image.data_base64.match(/^data:.+\/(.+);base64,(.*)$/);
console.log('done');  // slow

var fileExtension = matches[1];
var base64 = matches[2];
var buffer = new Buffer(base64, 'base64');

...
yield Promise.resolve( filesystem().writeFile(temporaryFilePath, buffer) );

最佳答案

以防万一您出于某种原因仍想使用正则表达式,可以通过将非尾随 .+ 子模式替换为适当的否定字符类(涉及更少的回溯)来提高性能。

使用

/^data:[^\/]+\/([^;]+);base64,(.*)$/

参见regex demo .

说明:

  • ^ - 字符串开头
  • data: - 文字字符序列data:
  • [^\/]+ - 除 / 之外的 1 个以上字符
  • \/ - 文字斜杠
  • ([^;]+) - 第 1 组:除 ; 之外的 1 个以上字符
  • ;base64, - 文字字符序列 ;base,
  • (.*) - 第 2 组:0+ 除换行符之外的任何字符
  • $ - 字符串结尾。

关于javascript - 正则表达式匹配慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36388569/

相关文章:

Java 执行正则表达式

javascript - 解析 html 元素中的 data-i18n 属性

node.js - 你能集中node_modules文件夹吗?

node.js - 无法安装 twitter bootstrap node.js 依赖项(在 Ubuntu 上)

javascript - 用于 JSON 缩小的 UglifyJs JavaScript API?

javascript - js框架形式的交互式3D

javascript - html/php 页面上的 Jquery 日期和时间

python - Python 中的自定义排序复杂字符串

javascript - 使用 JavaScript 创建和保存文件

javascript - 如何在此 javascript 文件中添加输入类型