Javascript 为什么不是';这个正则表达式不符合预期的方式吗?
我试图去掉斜杠字符,以防它出现在字符串的末尾。我使用了下面的表达式,意在匹配行尾没有斜杠的任何字符 出于某种原因(当然是逻辑上的和可以解释的,但不是我自己掌握的),我将其分成三个字符串,如下所示 [“http:”、“hazaa.com”、“blopp”]Javascript 为什么不是';这个正则表达式不符合预期的方式吗?,javascript,regex,Javascript,Regex,我试图去掉斜杠字符,以防它出现在字符串的末尾。我使用了下面的表达式,意在匹配行尾没有斜杠的任何字符 出于某种原因(当然是逻辑上的和可以解释的,但不是我自己掌握的),我将其分成三个字符串,如下所示 [“http:”、“hazaa.com”、“blopp”] 我错在哪里 如何解决 当前正则表达式将与字符串部分匹配,直到遇到第一个/或$。忽略第二个参数;对于,没有第二个参数 要删除尾部斜杠,请使用以下函数: var str = "http://hazaa.com/blopp/"; str = str.
/
或$
。忽略第二个参数;对于,没有第二个参数
要删除尾部斜杠,请使用以下函数:
var str = "http://hazaa.com/blopp/";
str = str.replace(/\/$/, "");
console.log(str);
// "http://hazaa.com/blopp"
var str = "http://hazaa.com/blopp/";
//replace the last slash with an empty string to remove it
str = str.replace(/\/$/,'');
如果需要检查字符串是否以斜杠结尾,请使用string.match
方法,如下所示:
var str = "http://hazaa.com/blopp/";
var match = str.match(/\/$/);
console.log(match);
// null if string does not end with /
// ["/"] if string ends with a /
如果您需要抓取除最后一个字符为/
之外的所有内容,请使用以下方法:
var r = /(.+?)\/*$/;
console.log("http://hazaa.com/blopp//".match(r)); // ["http://hazaa.com/blopp//", "http://hazaa.com/blopp"]
console.log("http://hazaa.com/blopp/".match(r)); // ["http://hazaa.com/blopp/", "http://hazaa.com/blopp"]
console.log("http://hazaa.com/bloppA".match(r)); // ["http://hazaa.com/bloppA", "http://hazaa.com/bloppA"]
返回数组中的第二个索引包含URL的所需部分。正则表达式的工作原理如下:
不贪婪地匹配(并捕获)任何字符(.+?)
匹配可选的尾随斜杠\/*$
/
)。取消冻结时,只要整个正则表达式匹配,它就会找到最小的匹配项。当前正则表达式将匹配字符串部分,直到遇到第一个/
或$
。忽略第二个参数;对于,没有第二个参数
要删除尾部斜杠,请使用以下函数:
var str = "http://hazaa.com/blopp/";
str = str.replace(/\/$/, "");
console.log(str);
// "http://hazaa.com/blopp"
var str = "http://hazaa.com/blopp/";
//replace the last slash with an empty string to remove it
str = str.replace(/\/$/,'');
如果需要检查字符串是否以斜杠结尾,请使用string.match
方法,如下所示:
var str = "http://hazaa.com/blopp/";
var match = str.match(/\/$/);
console.log(match);
// null if string does not end with /
// ["/"] if string ends with a /
如果您需要抓取除最后一个字符为/
之外的所有内容,请使用以下方法:
var r = /(.+?)\/*$/;
console.log("http://hazaa.com/blopp//".match(r)); // ["http://hazaa.com/blopp//", "http://hazaa.com/blopp"]
console.log("http://hazaa.com/blopp/".match(r)); // ["http://hazaa.com/blopp/", "http://hazaa.com/blopp"]
console.log("http://hazaa.com/bloppA".match(r)); // ["http://hazaa.com/bloppA", "http://hazaa.com/bloppA"]
返回数组中的第二个索引包含URL的所需部分。正则表达式的工作原理如下:
不贪婪地匹配(并捕获)任何字符(.+?)
匹配可选的尾随斜杠\/*$
/
)。取消reedy时,只要整个正则表达式匹配,它就会找到最小的匹配项。在str.match(“[^/$]+”,“g”)代码>,为什么要将美元符号放在括号内?它应该在外部,即,str.match(“[^/]+$”,“g”)代码>
要删除所有尾随斜杠,可以使用str.replace(/\/+$/,“”)
。(如果只想删除最后一个尾随斜杠,请删除替换的正则表达式中的+
)
更新:
还有一种方法不使用替换:
function stripEndingSlashes(str) {
var matched = str.match("(.*[^/]+)/*$");
return matched ? matched[1] : "";
}
在str.match(“[^/$]+”,“g”)代码>,为什么要将美元符号放在括号内?它应该在外部,即,str.match(“[^/]+$”,“g”)代码>
要删除所有尾随斜杠,可以使用str.replace(/\/+$/,“”)
。(如果只想删除最后一个尾随斜杠,请删除替换的正则表达式中的+
)
更新:
还有一种方法不使用替换:
function stripEndingSlashes(str) {
var matched = str.match("(.*[^/]+)/*$");
return matched ? matched[1] : "";
}
为什么要使用正则表达式?只需检查字符串的最后一个符号是否是斜杠,然后切片即可。像这样:
if (str.slice(-1) === '/') {
str = str.slice(0, -1);
}
为什么要使用正则表达式?只需检查字符串的最后一个符号是否是斜杠,然后切片即可。像这样:
if (str.slice(-1) === '/') {
str = str.slice(0, -1);
}
regexp正在选择“除斜杠以外的所有内容”。这就是为什么match()
返回斜杠之间的字符串部分
您可以使用replace()
函数解决此问题:
var str = "http://hazaa.com/blopp/";
str = str.replace(/\/$/, "");
console.log(str);
// "http://hazaa.com/blopp"
var str = "http://hazaa.com/blopp/";
//replace the last slash with an empty string to remove it
str = str.replace(/\/$/,'');
regexp文本应始终包含在/
字符之间。这里的regexp是:
\/
:表示单个斜杠字符。为了防止Javascript将斜杠解释为regexp的结尾,需要使用反斜杠对其进行“转义”
$
:这表示字符串的结尾
regexp正在选择“除斜杠以外的所有内容”。这就是为什么
match()
返回斜杠之间的字符串部分
您可以使用replace()
函数解决此问题:
var str = "http://hazaa.com/blopp/";
str = str.replace(/\/$/, "");
console.log(str);
// "http://hazaa.com/blopp"
var str = "http://hazaa.com/blopp/";
//replace the last slash with an empty string to remove it
str = str.replace(/\/$/,'');
regexp文本应始终包含在/
字符之间。这里的regexp是:
\/
:表示单个斜杠字符。为了防止Javascript将斜杠解释为regexp的结尾,需要使用反斜杠对其进行“转义”
$
:这表示字符串的结尾
好的,这实际上回答了(1)和(2),但引出了另一个问题。如果要匹配(不再替换)除尾随斜杠以外的所有字符,应该如何放置正则表达式?我试图str.match(“^(/$)”,“g”)
,但失败了。@agstudy和Salman:Running”http://hazaa.com/blopp/“.match(/\/$/,”)
我得到斜杠。我想得到除斜杠以外的所有答案。好吧,这实际上回答了(1)和(2),但引出了另一个问题。如果要匹配(不再替换)除尾随斜杠以外的所有字符,应该如何放置正则表达式?我试图str.match(“^(/$)”,“g”)
,但失败了。@agstudy和Salman:Running”http://hazaa.com/blopp/“.match(/\/$/,”)
我得到斜杠。为了学习,我想得到除斜杠以外的所有东西。我想知道如何处理更复杂的问题。str.slice(-1)=“/”
更短。如果str后面有多个斜杠呢?是的,没有正则表达式,你仍然可以解决这个问题,但正则表达式要简洁得多。@Hui Zheng:我怀疑url中会有多个斜杠,但你是对的…str.slice(0,-1)
也更短。你