1

我试图摆脱斜杠字符,以防它存在于我的字符串末尾。我使用了以下表达式,旨在匹配行尾不是斜线的任何字符

var str = "http://hazaa.com/blopp/";
str.match("[^/$]+", "g");

出于某种原因(当然是合乎逻辑且可解释的,但我自己无法理解),我将其拆分为三个字符串,如下所示。

[“http:”、“hazaa.com”、“blopp”]

  1. 我在错误地假设什么?
  2. 如何解决?
4

4 回答 4

4

str.match("[^/$]+", "g");中,为什么要在括号内放置美元符号?它应该在外面,即str.match("[^/]+$", "g");

要删除所有尾部斜杠,您可以使用str.replace(/\/+$/, ""). (如果您只想删除最后一个斜杠,请删除+replace正则表达式)

更新:

另一种不使用的方法replace

function stripEndingSlashes(str) {
    var matched = str.match("(.*[^/]+)/*$");
    return matched ? matched[1] : "";
}
于 2013-01-07T08:36:14.863 回答
2

正则表达式正在选择“除斜线之外的所有内容”。这就是为什么match()返回斜杠之间的字符串部分。

您可以使用以下功能解决它replace()

var str = "http://hazaa.com/blopp/";
//replace the last slash with an empty string to remove it
str = str.replace(/\/$/,'');

正则表达式文字应始终被/字符包围。所以这里的正则表达式是:

  • \/: 这意味着一个单斜杠字符。为了防止 Javascript 将您的斜杠解释为正则表达式的结尾,它需要用反斜杠“转义”。

  • $:这意味着字符串的结尾

于 2013-01-07T08:39:58.540 回答
1

您当前的正则表达式将匹配字符串的部分,直到遇到第一个/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 的所需部分。正则表达式的工作方式如下:

  • (.+?)非贪婪匹配(并捕获)任何角色
  • \/*$匹配可选的尾部斜杠

第一部分正则表达式被故意更改为非贪婪。如果它是贪婪的,它会尝试找到最大的匹配,只要整个正则表达式匹配(消耗/过程中的尾随)。当不贪婪时,只要整个正则表达式匹配,它就会找到最小的匹配。

于 2013-01-07T08:31:32.303 回答
0

为什么使用正则表达式?只需检查字符串的最后一个符号是否为斜线,然后切片。像这样:

if (str.slice(-1) === '/') {
  str = str.slice(0, -1);
}
于 2013-01-07T08:37:43.697 回答