jquery - 改进了使用正则表达式替换的性能

标签 jquery regex node.js javascript

我有一个应用程序,目前我在某些模式上替换字符串(不是固定的文本,而是将其用作数据库),我有几个替换多个表达式,这些表达式在某些情况下不会进行更改,因为它们并不总是与表达式一致,但如果数据存在则拥有它们。现在我必须更新应用程序,因为我更改了更多文本和 url 链接,我考虑过更改这部分代码,因为它看起来非常新手技术,现在我不是那么多,我已经改进并学到了更多东西.

我想到了三种可能的情况(还没有尝试新的情况),但知道哪一个将是运行最快的版本(不是衡量它或准备基准)。

首先停止当前代码并进行多次替换(意味着每次添加新的搜索和替换术语时都更改代码):

当前和第一个案例:

var string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam euismod.';
var date = new Date();

string = string.replace(/EXPR/g, 'NEWVALUE' ).replace(/SECOND_EXPR/g, 'NEWVALUE' ).replace(/THIRD_EXPR/g, 'NEWVALUE' );

第二个选项,我认为这是维护代码的最佳方式。 一个数组,其中包含所有必须搜索、替换并一一处理的表达式:

var string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam euismod.';

var date = new Date();

var dataDB = {

    "expr" : "new value",
    "expr" : date,
    "expr" : "new value",
    ...... more properties ......
};

var exprs = [
    {
        search: '#date#',
        change: date
    },{
        search: 'EXPR',
        change: 'NEWVALUE'
    },{
        ....... add 10 more values .......
 ];

exprs.forEach(function(expr){

    string = string.replace(/expr.search/g, dataDB[expr.value] );
});

第三个选项(上述选项的改编)可能是最快的,因为它不会处理字符串中不存在的表达式,但您将需要一项更大的工作,因为数据库位于更改的文本旁边,应该添加新字段并输入要使用的表达式,引入将在数据库中一起发生更改的文本。如果只使用两个正则表达式(系统中定义的),则会存储两个并且只处理这两个表达式:

var string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam euismod.';

var date = new Date();

var dataDB = {

    "expr" : "new value",
    "expr" : date,
    "expr" : "new value",
    ...... more properties ......
};

var exprsDB = [
    {
        search: '#date#',
        change: date
    },{
        search: 'EXPR',
        change: 'NEWVALUE'
    },{
        ....... only expressions chosen for this text .......
 ];

exprsDB.forEach(function(expr){

    string = string.replace(/expr.search/g, dataDB[expr.value] );
});

您选择无遗产吗?您认为还有更好的方法吗?始终使用基于系统的表达式,只有一些文本才能实现其中之一。例如,如果有 ##date## 文本,它会被当前日期替换,等等。我一直在 Github 上查找是否已经有类似的程序并且可以使用部分代码。它会使用表达式和 dataDB 创建函数库来存储要运行的函数的名称?示例:##date## 调用函数changeDate(string) 或类似函数,并返回已更改的字符串。

谢谢。

最佳答案

我尝试过 benchmark.js,似乎在代码中引入可能的正则表达式(尽管未使用某些模式)以进入要准确使用的循环会更有效。

Replace#Normal x 929,265 ops/sec ±6.60% (79 runs sampled)
Replace#forEach x 263,416 ops/sec ±10.30% (64 runs sampled)
Replace#for x 374,252 ops/sec ±9.16% (71 runs sampled)
Fastest is Replace#Normal

关于jquery - 改进了使用正则表达式替换的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29313207/

相关文章:

javascript - 当移动到 js 文件时,JQuery 函数停止工作

javascript - Jquery 在 AJAX 表单结果显示中没有响应

javascript - 如何测试有效的 UUID/GUID?

node.js - 如何将 BLOB 格式的图像上传到 Firebase 存储?

javascript - FabricJS 奇怪的线条动画与 pageSnap

javascript - 使用 js/jquery 展开和折叠表格单元格值

python - 如果有字符则在括号前添加空格

java - 使用 java regex 处理标记标签

node.js - 使用迁移 API 时 Knex 迁移不起作用

node.js - NodeJS 服务器写入响应并开始文件下载