反斜杠 - 正则表达式 - Javascript

Posted

技术标签:

【中文标题】反斜杠 - 正则表达式 - Javascript【英文标题】:Backslashes - Regular Expression - Javascript 【发布时间】:2012-06-01 22:53:44 【问题描述】:

我想构建一个 JS 函数,将参数列表连接到有效路径(因为我无法确定路径的一部分是否带有斜杠)

这是函数:

concatPath = function() 
    var path = "";
    for(var i = 0; i < arguments.length; i++)   
        path += arguments[i].replace("(\\|/)$|^(\\|/)", "") + "/";
    
    return path;

使用的正则表达式匹配http://regexpal.com 上的所有开始和结束斜杠和反斜杠 但该功能无法正常工作(RegEx 不匹配)。 此外,Chrome 状态

SyntaxError:无效的正则表达式:/()$|^()/:未终止的组

当我只使用 RegEx 时

 (\\)$|^(\\)

但是,使用 RegEx

 (\\)$|^(\\)

工作正常。

是太晚了还是我错过了什么特别的东西?

提前致谢!

狮子座

【问题讨论】:

【参考方案1】:

在对replace 的调用中,您应该使用正则表达式文字(/.../)而不是字符串文字('...'"...")。字符串有自己的反斜杠解释,在正则表达式构造函数被破解之前就开始了,所以你需要额外的引用。

匹配一个反斜杠,正则表达式文字:/\\/

匹配一个反斜杠,字符串中的正则表达式:'\\\\'

但是在正则表达式中,你还必须在正斜杠前面加上反斜杠,因为正斜杠是整个事物的分隔符:

path += arguments[i].replace(/(\\|\/)$|^(\\|\/)/, "") + "/";

或者,如果您出于某种原因喜欢使用字符串,这也应该有效:

path += arguments[i].replace("(\\\\|/)$|^(\\\\|/)", "") + "/";

附带说明,当您的替代品是单个字符时,(x|y) 过于矫枉过正;你可以只使用一个字符类([xy])。在这种情况下,您会得到:

path += arguments[i].replace(/[\\\/]$|^[\\\/]/, "") + "/";

path += arguments[i].replace("[\\\\/]$|^[\\\\/]", "") + "/";

【讨论】:

非常感谢,你能告诉我为什么我必须使用'\\\\'吗?我认为“\\”就足够了,因为我需要一个反斜杠来防止它转义“ 注意在 *** cmets 中也需要反斜杠... :) 当您使用字符串形式时,您将通过两个解析器 - javascript 解析器,它正在构建字符串源代码和正则表达式解析器,它正在从字符串中构建正则表达式。正则表达式必须有两个反斜杠,但为了从文字中获取字符串中的单个反斜杠,您必须将其加倍。总之,这意味着四个反斜杠。试试这个:alert("--&gt; \\\\ &lt;--") - 当您将字符串传递给 replace 时,您看到的就是 Regexp.new 看到的。 不客气!您应该接受一个答案(我的或 agent-j 的),以便人们将来更有可能回答您的问题。 使用字符串可以将变量放入其中。#usecase【参考方案2】:

试试这个...使用 [字符类] 会更容易一些。要将单个\ 与您需要\\\\ 的javascript 字符串匹配,这可能是正在发生的事情。

new Regexp('^[\\\\/]|[\\\\/]$')

您也可以尝试/^[\\\/]|[\\\/]$/g 表示法。

s = 'c:\\folder\\'
console.log(s.replace(/^[\\\/]|[\\\/]$/g, ''))

【讨论】:

以上是关于反斜杠 - 正则表达式 - Javascript的主要内容,如果未能解决你的问题,请参考以下文章

Linux中的正斜杆(/)和反斜杆(\)的作用

Javascript 和反斜杠替换

python 正则表达式中反斜杠()的麻烦和陷阱

正则表达式仅允许某些特殊字符并限制下划线

python 正则表达式中反斜杠()的麻烦和陷阱 (转)

Javascript 正则表达式负回顾