【发布时间】:2013-05-17 19:06:23
【问题描述】:
我有以下 Javascript 代码从 RegExp 中获取内部字符串:
Function.prototype.method = function (name,func){
this.prototype[name] = func;
return this;
};
RegExp.method('toRawString', function(){
return this.toString().replace(/^.(.*).$/,"$1");
});
这样做的目的是避免在字符串中出现双引号。例如,如果你有一个 Windows 文件路径“C:\My Documents\My Folder\MyFile.file”,你可以像下面这样使用它:
alert(/C:\My Documents\My Folder\MyFile.file/.toRawString());
但是它不适用于 ""C:\My Documents\My Folder\" 因为它会导致语法错误。避免它的唯一方法是在字符串末尾保留双引号。因此它将被写入
alert(/C:\My Documents\My Folder\\/.toRawString());
事实上,字符串末尾的任何奇数个反斜杠都是错误的,因此所有结尾的反斜杠都必须进行双重转义。使用多行小实现并不难,但是有没有单一的 RegExp 解决方案?
注意
当使用toRawString 时,RegExp 对象的this 通常不会用于除该方法之外的任何其他目的。我只想使用 RegExp 的语法来避免源代码中的双反斜杠。不幸的是,结尾的双斜线不能轻易避免。我认为另一种解决方法是在最后强制一个空格,但那是另一个问题。
更新
我终于解决了“另一个问题”并贴出代码here。
【问题讨论】:
-
我想,如果我们真的想成为 hacky,你可以这样做:
(function(){/*C:\My Documents\My Folder\MyFile.file*/}).toString().split('*')[1]并且你不必逃避任何反斜杠! -
很好,但还不够好,因为您可能仍需要转义
/或[]、()。我想出了一个解决方案,只需要使用][,在]序列的最后一个位置(例如']]]]]' 中的最后一个位置)转义],不仅使用正则表达式,还有字符组。查看我的更新,有代码链接。 -
不,在该示例中您必须转义的唯一两件事是
*和*/所有其他序列都可以:]、)、/等。 -
Emm...唯一不方便的是:除了内容字符串之外还有一个太长的序列。
标签: javascript regex