正则表达式匹配并选择删除网址末尾的/

时间:2017-04-09 13:07:18

标签: regex

我有一个表格应该采用以下格式的网址:

http://website.com/test/1

http://website.com/test/1/

我的正则表达式目前是这样的:

url.match(/website.com(.*)/);

我希望捕获组匹配内容并自动删除最后一个" /"在URL的末尾,这样,无论是否存在,它总会返回" / test / 1" 。怎么样?

2 个答案:

答案 0 :(得分:0)

尝试使用以下正则表达式

url.match(/website.com(.*)\b/);

它适用于您的情况。如果不是,请告诉我。

答案 1 :(得分:0)

嗯......正则表达式'无法真正"删除" / explode个字符。例如,假设您有一个可以输入URL的字段。您可以限制用户添加" /",就像给他一条错误消息:"删除您网址末尾的"或者只是不允许它(使用Javascript,所以当他们尝试添加它时," /"会被删除)。

我会给你一个正则表达式,用于检查你网址中的所有内容:

(https?:\/\/)?(([A-Za-z0-9]+)((\.[a-z]{1,3})))(\/\w+)\/(\d)\/?

这是正则表达式的作用:

首先,它会检查网址中是否存在http://或https://:(https?:\/\/)? https?基本上意味着:如果http有" s"在它的末尾,因此s?(可以是任何角色,但是:a? b? c? 1? 2? 3?)。它与#34;?"相同。在(https?:\/\/)(https?:\/\/)?之后,如果整个http://或https://存在,它会在这里检查。这意味着像这样的URL:example.com(开头没有http或https)也会匹配。

然后我们有表达式的整个部分:(([A-Za-z0-9]+)((\.[a-z]{1,3})))。让我们分解一下:

([A-Za-z0-9]+)

这里检查任何字母或数字(例如:"网站"),(大写或小写),直到遇到:((\.[a-z]{1,3})),它检查任何小写字母只有最大值3个字母(例如:.com)。

所以(([A-Za-z0-9]+)((\.[a-z]{1,3})))会匹配,仅举几个例子:stackoverflow.com,twitter.com,google.se但不是example.online,因为{1,3}基本上说&#34 ;在1到3"只有字母。

然后我们有最后一部分:(\/\w+)\/(\d)\/?。首先,我们(\/\w+)检查斜杠后面的任何单词,例如:" / test"。 \w基本上意味着检查任何单词。

之后检查" /":\/,最后是" /"后面的数字(\d),例如:" / 1"。在这个正则表达式的最后,我们有一个\/?,它只检查是否有斜杠。

所以在PHP中,这个正则表达式可以像这样使用:

$pattern = "/(https?:\/\/)?(([A-Za-z0-9]+)((\.[a-z]{1,3})))(\/\w+)\/(\d)\/?/";
$url = "https://example.com/user/1/";

if(preg_match($pattern, $url, $matches)){
echo $matches[1]; // Will echo https://
echo $matches[2]; // Will echo "example.com"
echo $matches[3]; // Will echo "example"
echo $matches[4]; // Will echo ".com"
echo $matches[5]; // Will echo ".com"
echo $matches[6]; // Will echo "/user"
echo $matches[7]; // Will echo "1"

var_dump($matches); // Will dump the array
}

希望这有帮助。

编辑;当然,正则表达式可以用更多的方式编写,对于不同的语言也是如此。但这只是我通常如何构建我的正则表达式的一个例子。我总是对它进行构造并将其分解为部分,这样我就可以更容易地看到它是什么,并试着想出我想要在正则表达式中检查的所有内容。