0

我有以下 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 的语法来避免源代码中的双反斜杠。不幸的是,结尾的双斜线不能轻易避免。我认为另一种解决方法是在最后强制一个空格,但那是另一个问题。RegExpthis

更新

我终于解决了“另一个问题”并在此处发布了代码。

4

3 回答 3

1

好的,我明白你想要做什么!这很hacky :)

尝试类似:

return this.toString().slice(1, -1).replace(/\\+$/, '\\')

希望有帮助。

于 2013-05-17T07:03:49.240 回答
0

这会产生语法错误:

/C:\My Documents\/

但是该正则表达式可以像这样正确编写:

/C:\\My Documents\\/

或者像这样:

new RegExp("C:\\\\My Documents\\\\")

我认为您的功能很好,并且返回了正确的结果。正则表达式不能以不成对的反斜杠结尾。这并不是说您在双重转义 - 您只是在转义转义字符。

这也会产生错误:

new RegExp("C:\\My Documents\\")

例如,像这样的正则表达式不能在没有一对反斜杠的情况下编写:

/C:\\What/

如果没有第二个反斜杠,\W 将被解释为特殊字符转义序列。所以转义转义字符不仅在最后是必要的。在任何可能被解释为转义序列开始的地方都需要它。出于这个原因,始终使用两个反斜杠来指示正则表达式中的反斜杠文字可能是一个很好的经验法则。

于 2013-05-17T06:52:29.200 回答
0

如果要在字符串中包含双引号,只需用单引号将其括起来。

s = '"C:\\My Documents\\My Folder\\MyFile.file"'
console.log(s) // Output => "C:\My Documents\My Folder\MyFile.file"
于 2013-05-17T06:57:34.510 回答