首页 > 编程语言 >网上 copy 的一段 javascript 代码 String.prototype.replaceAll = fucntion(){...} 存在问题

网上 copy 的一段 javascript 代码 String.prototype.replaceAll = fucntion(){...} 存在问题

时间:2024-06-10 10:11:29浏览次数:16  
标签:raRegExp ... String javascript ARepText replaceAll AFindText prototype

早些年,浏览器没有内置 字符串的 replaceAll()方法,就从网上 copy 了一段 replaceAll() 的实现:

String.prototype.replaceAll=function(AFindText,ARepText){raRegExp=new RegExp(AFindText,"g");return this.replace(raRegExp,ARepText)}

今天突然遇到一个问题,定位到了这段代码,我才发现,这个实现存在问题:

var str = "aaa\\\\bbb"; //当代码中含有两个连续的 '\'

console.log(str.replaceAll("\\", "\\\\"));

控制台直接抛出错误:

VM25:1 Uncaught SyntaxError: Invalid regular expression: /\/: \ at end of pattern
 at new RegExp (<anonymous>) at String.replaceAll (<anonymous>:1:67)
 at <anonymous>:1:17

后来找到一篇相关的介绍:

Node.js和javascript中RegExp对象的风险及防范

https://www.jianshu.com/p/67aeaf115a2d

才搞明白缘由。

正确的实现:

if(String.prototype.replaceAll == null){
String.prototype.replaceAll=function(AFindText,ARepText){AFindText=AFindText.replace(/\\/ig, "\\\\");raRegExp=new RegExp(AFindText,"g");return this.replace(raRegExp,ARepText)}}

主要增加了这么一句:

AFindText=AFindText.replace(/\\/ig, "\\\\");

 

网上关于 String.prototype.replaceAll=function(...){...} 的实现基本上都存在这个问题。

 

标签:raRegExp,...,String,javascript,ARepText,replaceAll,AFindText,prototype
From: https://www.cnblogs.com/personnel/p/18240419

相关文章

  • 让你的网页动起来:Javascript+CSS拖曳盒子指南
    让网页上的元素具有拖拽功能,可以提升用户体验,尤其是在需要用户交互的场景中。下面是一个使用JavaScript和CSS来实现拖拽效果的基本指南。1.HTML结构首先,你需要在HTML中定义一个可拖拽的元素,通常是一个div。 <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"......
  • 【JavaScript】了解 Sass:现代 CSS 的强大预处理器
    我已经从你的全世界路过像一颗流星划过命运的天空很多话忍住了不能说出口珍藏在我的心中只留下一些回忆                     ......
  • 【华为OD】D卷真题100分:数组拼接 JavaScript代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、Java、C、C++、python代码实现:【华为OD】D卷真题100分:数组拼接JavaScript代码实现[思路+代码]-CSDN......
  • JS(JavaScript)学习总结
    概念:JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语   言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范......
  • “另一个程序已锁定文件的一部分,进程无法访问 打不开磁盘“G:\Ubuntu20.04.3\Ubuntu
    文章目录前言:一、删除lck文件二、移除挂载硬盘总结:前言:在重新刷了系统进行对虚拟机移植的过程中我遇到了“另一个程序已锁定文件的一部分,进程无法访问打不开磁盘"G:\Ubuntu20.04.3\Ubuntu20.04.3.vmdk"或它所依赖的某个快照磁盘……”的问题,因为情况慌乱,所以我没......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript旅游网站(中山)
    HTML+CSS+JS【旅游网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript广东传统文化
    HTML+CSS+JS【传统文化】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • JAVA stringcompiler动态编译
    packagecompiler.mydemo;importjavax.tools.Diagnostic;importjavax.tools.DiagnosticCollector;importjavax.tools.FileObject;importjavax.tools.ForwardingJavaFileManager;importjavax.tools.JavaCompiler;importjavax.tools.JavaFileManager;importjava......
  • 一起学习javascript-进阶版函数(1)
    <script>  //举个例子 functionsum(x){    returnx+1;  }    functionadd(a,b,f){    varc=f(a)+f(b)    console.log("c的值为:"+c);  }  //给add函数传参  add(3,6,sum);// 这里的f相当于为//......
  • 一起学习javascript-函数(2)
    <script>  //变量作用域与解构赋值  functionf1(y){  varx=1;  x=x+2;  console.log(x+y);  console.log(x);  //因为变量x在函数f1中申明,在这里属于局部变量,所以x只能在f1中访问,f1执行完,x就销毁了}f1(2);//为了更直观一点,调用......