gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:28:34 25 4
gpt4 key购买 nike

我有一个应用程序,目前我在某些模式上替换字符串(不是固定的文本,而是将其用作数据库),我有几个替换多个表达式,这些表达式在某些情况下不会进行更改,因为它们并不总是与表达式一致,但如果数据存在则拥有它们。现在我必须更新应用程序,因为我更改了更多文本和 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com