反斜杠 - 正则表达式 - Javascript

IT技术 javascript regex
2021-01-25 13:44:01

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

这是函数:

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

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

语法错误:无效的正则表达式:/()$|^()/:未终止的组

当我只使用 RegEx

 (\\)$|^(\\)

但是,使用正则表达式

 (\\)$|^(\\)

工作正常。

是不是太晚了,还是我错过了一些特别的东西?

提前致谢!

狮子座

2个回答

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

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

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

但是在正则表达式文字中,您还必须在正斜杠前面放置反斜杠,因为正斜杠是整个事物的分隔符:

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

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

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

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

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

path += arguments[i].replace("[\\\\/]$|^[\\\\/]", "") + "/";
非常感谢,你能告诉我为什么我必须使用'\\\\'吗?我认为“\\”就足够了,因为我需要一个反斜杠来防止它逃脱“
2021-03-10 13:44:01
还要注意 StackOverflow 注释中的反斜杠...解析器,它正在从字符串中构建一个正则表达式。正则表达式必须有两个反斜杠,但为了从文字中获得字符串中的单个反斜杠,您必须将其加倍。总之,这意味着四个反斜杠。试试这个:alert("--> \\\\ <--")- 你看到的是 Regexp.new 在你传递一个字符串时看到的replace
2021-03-30 13:44:01
使用字符串可让您将变量放入。#usecase
2021-04-07 13:44:01
别客气!您应该接受答案(我的或 agent-j 的),以便人们将来更有可能回答您的问题。
2021-04-09 13:44:01

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

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

您也可以尝试/^[\\\/]|[\\\/]$/g符号。

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