RegEx用于删除第一个和最后一个char并将结束双斜杠转换为单个

时间:2013-05-17 06:34:30

标签: javascript regex

我有以下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的{​​{1}}对象通常不会用于除该方法之外的任何其他目的。我只想使用RegExp的语法来避免源代码中的双反斜杠。不幸的是,结尾双斜线不容易避免。我认为另一种解决方法是在最后强制使用空格,但那是另一个问题。

更新

我终于解决了“另一个问题”并发布了代码here

3 个答案:

答案 0 :(得分:1)

好的,我得到了你想做的事!这是hacky:)

尝试类似:

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

希望有所帮助。

答案 1 :(得分:0)

这会产生语法错误:

/C:\My Documents\/

但正则表达式可以像这样写得正确:

/C:\\My Documents\\/

或者像这样:

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

我认为你的功能很好,并且返回了正确的结果。正则表达式不能以不成对的反斜杠结束。并不是说你是双重逃避 - 你只是逃避逃脱角色。

这也会产生错误:

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

例如,如果没有一对反斜杠,就不能编写这样的正则表达式:

/C:\\What/

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

答案 2 :(得分:0)

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

s = '"C:\\My Documents\\My Folder\\MyFile.file"'
console.log(s) // Output => "C:\My Documents\My Folder\MyFile.file"