如何在 JavaScript 中执行 str_replace,替换 JavaScript 中的文本? [英] How can I perform a str_replace in JavaScript, replacing text in JavaScript?

查看:12
本文介绍了如何在 JavaScript 中执行 str_replace,替换 JavaScript 中的文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 str_replace 或其类似的替代方法来替换 JavaScript 中的某些文本.

var text = "这是我想替换的一些示例文本";var new_text = replace_in_javascript(想要"、不想要"、文本);文件.写(新文本);

应该给

这是一些我不想替换的示例文本

<块引用>

如果您要使用正则表达式,对性能的影响是什么与内置替换方法的比较.

解决方案

使用正则表达式进行字符串替换明显比使用字符串替换慢.
正如 在 JSPerf 上演示的那样,您可以有不同级别的效率来创建正则表达式,但所有这些都比简单的字符串替换慢得多.正则表达式较慢,因为:

<块引用>

固定字符串匹配没有回溯、编译步骤、范围、字符类或许多其他会降低正则表达式引擎速度的功能.肯定有优化正则表达式匹配的方法,但我认为在常见情况下不太可能击败索引到字符串中.

为了在 JS perf 页面上运行一个简单的测试,我记录了一些结果:

<脚本>//测试endStringRegEx = startString.replace(/abc/g, "def")//正则表达式endStringString = startString.replace("abc", "def", "g")//字符串endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def");//新的正则字符串endStringRegExNew = startString.replace(new RegExp(/abc/g), "def");//新的正则表达式endStringStoredRegEx = startString.replace(re, "def")//保存的正则表达式</script>

Chrome 68 的结果如下:

字符串替换:9,936,093 次操作/秒保存的正则表达式:5,725,506 次操作/秒正则表达式:5,529,504 次操作/秒新的正则表达式字符串:3,571,180 次操作/秒新正则表达式:3,224,919 次操作/秒

为了这个答案的完整性(从评论中借用),值得一提的是 .replace 只替换匹配字符的第一个实例.它只能用 //g 替换所有实例.如果替换多个实例 name.replace(' ', '_').replace(' ', '_').replace(' ', '_'); 或更糟 while (name.includes(' ')) { name = name.replace(' ', '_') }

I want to use str_replace or its similar alternative to replace some text in JavaScript.

var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write(new_text);

should give

this is some sample text that i dont want to replace

If you are going to regex, what are the performance implications in comparison to the built in replacement methods.

解决方案

Using regex for string replacement is significantly slower than using a string replace.
As demonstrated on JSPerf, you can have different levels of efficiency for creating a regex, but all of them are significantly slower than a simple string replace. The regex is slower because:

Fixed-string matches don't have backtracking, compilation steps, ranges, character classes, or a host of other features that slow down the regular expression engine. There are certainly ways to optimize regex matches, but I think it's unlikely to beat indexing into a string in the common case.

For a simple test run on the JS perf page, I've documented some of the results:

<script>
// Setup
  var startString = "xxxxxxxxxabcxxxxxxabcxx";
  var endStringRegEx = undefined;
  var endStringString = undefined;
  var endStringRegExNewStr = undefined;
  var endStringRegExNew = undefined;
  var endStringStoredRegEx = undefined;      
  var re = new RegExp("abc", "g");
</script>

<script>
// Tests
  endStringRegEx = startString.replace(/abc/g, "def") // Regex
  endStringString = startString.replace("abc", "def", "g") // String
  endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def"); // New Regex String
  endStringRegExNew = startString.replace(new RegExp(/abc/g), "def"); // New Regexp
  endStringStoredRegEx = startString.replace(re, "def") // saved regex
</script>

The results for Chrome 68 are as follows:

String replace:    9,936,093 operations/sec
Saved regex:       5,725,506 operations/sec
Regex:             5,529,504 operations/sec
New Regex String:  3,571,180 operations/sec
New Regex:         3,224,919 operations/sec

From the sake of completeness of this answer (borrowing from the comments), it's worth mentioning that .replace only replaces the first instance of the matched character. Its only possible to replace all instances with //g. The performance trade off and code elegance could be argued to be worse if replacing multiple instances name.replace(' ', '_').replace(' ', '_').replace(' ', '_'); or worse while (name.includes(' ')) { name = name.replace(' ', '_') }

这篇关于如何在 JavaScript 中执行 str_replace,替换 JavaScript 中的文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆