反斜杠 - 正则表达式 - 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("--> \\\\ <--")
- 当您将字符串传递给 replace
时,您看到的就是 Regexp.new 看到的。
不客气!您应该接受一个答案(我的或 agent-j 的),以便人们将来更有可能回答您的问题。
使用字符串可以将变量放入其中。#usecase【参考方案2】:
试试这个...使用 [字符类] 会更容易一些。要将单个\
与您需要\\\\
的javascript 字符串匹配,这可能是正在发生的事情。
new Regexp('^[\\\\/]|[\\\\/]$')
您也可以尝试/^[\\\/]|[\\\/]$/g
表示法。
s = 'c:\\folder\\'
console.log(s.replace(/^[\\\/]|[\\\/]$/g, ''))
【讨论】:
以上是关于反斜杠 - 正则表达式 - Javascript的主要内容,如果未能解决你的问题,请参考以下文章