我试图摆脱斜杠字符,以防它存在于我的字符串末尾。我使用了以下表达式,旨在匹配行尾不是斜线的任何字符。
var str = "http://hazaa.com/blopp/";
str.match("[^/$]+", "g");
出于某种原因(当然是合乎逻辑且可解释的,但我自己无法理解),我将其拆分为三个字符串,如下所示。
[“http:”、“hazaa.com”、“blopp”]
- 我在错误地假设什么?
- 如何解决?
我试图摆脱斜杠字符,以防它存在于我的字符串末尾。我使用了以下表达式,旨在匹配行尾不是斜线的任何字符。
var str = "http://hazaa.com/blopp/";
str.match("[^/$]+", "g");
出于某种原因(当然是合乎逻辑且可解释的,但我自己无法理解),我将其拆分为三个字符串,如下所示。
[“http:”、“hazaa.com”、“blopp”]
在str.match("[^/$]+", "g");
中,为什么要在括号内放置美元符号?它应该在外面,即str.match("[^/]+$", "g");
。
要删除所有尾部斜杠,您可以使用str.replace(/\/+$/, "")
. (如果您只想删除最后一个斜杠,请删除+
的replace
正则表达式)
更新:
另一种不使用的方法replace
:
function stripEndingSlashes(str) {
var matched = str.match("(.*[^/]+)/*$");
return matched ? matched[1] : "";
}
正则表达式正在选择“除斜线之外的所有内容”。这就是为什么match()
返回斜杠之间的字符串部分。
您可以使用以下功能解决它replace()
:
var str = "http://hazaa.com/blopp/";
//replace the last slash with an empty string to remove it
str = str.replace(/\/$/,'');
正则表达式文字应始终被/
字符包围。所以这里的正则表达式是:
\/
: 这意味着一个单斜杠字符。为了防止 Javascript 将您的斜杠解释为正则表达式的结尾,它需要用反斜杠“转义”。
$
:这意味着字符串的结尾
您当前的正则表达式将匹配字符串的部分,直到遇到第一个/
or 。$
第二个参数被忽略;没有第二个参数String.match
。
要删除尾部斜杠,请使用以下String.replace
函数:
var str = "http://hazaa.com/blopp/";
str = str.replace(/\/$/, "");
console.log(str);
// "http://hazaa.com/blopp"
如果您需要检查字符串是否以斜杠结尾,请使用如下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 的所需部分。正则表达式的工作方式如下:
(.+?)
非贪婪匹配(并捕获)任何角色\/*$
匹配可选的尾部斜杠第一部分正则表达式被故意更改为非贪婪。如果它是贪婪的,它会尝试找到最大的匹配,只要整个正则表达式匹配(消耗/
过程中的尾随)。当不贪婪时,只要整个正则表达式匹配,它就会找到最小的匹配。
为什么使用正则表达式?只需检查字符串的最后一个符号是否为斜线,然后切片。像这样:
if (str.slice(-1) === '/') {
str = str.slice(0, -1);
}