【发布时间】:2018-06-05 15:30:47
【问题描述】:
当对包含一些正则表达式元字符组合的字符串使用正则表达式替换功能时,字符串中被替换的字符被错误地替换。
我一直在使用以下表达式:
string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
这至少在 Chrome 中有效,例如在 JSFiddle 中也可以正常工作,但是在 IE 11(可能是大多数 IE 版本)中,这会错误地将字符替换为不正确的字符,例如:
var string = "test (fake)";
string = string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
结果:
test \\(fake\\) 而不是test \(fake\)
我最初以为我可以删除replace() 第二个参数中的一个斜杠,但结果是:
test (fake)
基本上,我似乎无法转义这些字符,因为我不知道如何指定我希望将其替换为字面意义上的\( 而不是( 或\\(。
之前有没有人遇到过这个问题并有解决方案,知道如何解决这个问题或逃避这些字符的其他方法吗?不幸的是,更改浏览器不是一种选择。
这是一个 JSFiddle 供参考以显示它的工作原理:
【问题讨论】:
-
jsfiddle.net/k42uygm8/5 在我的 IE11 中没有打开:( 实际上,我相信你看到的不是你得到的:这可能是“控制台视图”,它显示的是字符串文字而不是文字字符串。
-
实际上,我在 IE11 中查看的堆栈中使用您的 jsfiddler 示例在此处获得了一个反斜杠。
-
调试的时候先注意到了;我的正则表达式模式错误并且没有正确匹配。有趣的是,有两个人在 IE 11 中打开它,一个甚至没有打开,一个工作。 lodash 函数似乎会遇到我遇到的同样问题,因为它基本上是一样的。
标签: javascript regex internet-explorer