Javascript 修改以下正则表达式以在URL末尾包含斜杠
以下正则表达式与URL中的最后一个单词匹配:Javascript 修改以下正则表达式以在URL末尾包含斜杠,javascript,regex,Javascript,Regex,以下正则表达式与URL中的最后一个单词匹配: var match = (location.search.match(/(\w+)$/)) ? location.search.match(/(\w+)$/)[0] : ""; 问题是,有时URL看起来像www.mysite.com/match last word/,因此word不匹配,因为末尾有一个斜杠 我试过这个: var match = (location.search.match(/(\w+)$\/*/)) ? locatio
var match = (location.search.match(/(\w+)$/))
? location.search.match(/(\w+)$/)[0]
: "";
问题是,有时URL看起来像www.mysite.com/match last word/
,因此word
不匹配,因为末尾有一个斜杠
我试过这个:
var match = (location.search.match(/(\w+)$\/*/))
? location.search.match(/(\w+)$\/*/)[0]
: "";
但不起作用。在最后添加模式
\W*
,以匹配零个或多个非单词字符
\b(\w+)\W*$
或
\b\w+(?=\W*$)
(?=\W*$)
正向先行断言,该断言断言匹配的\W+
后面必须紧跟\W*
,零个或多个非单词字符,并进一步紧跟行尾
示例:
> var s = "www.mysite.com/match-last-word/"
undefined
> s.match(/\b\w+(?=\W*$)/)[0]
'word'
在最后添加模式
\W*
,以匹配零个或多个非单词字符
\b(\w+)\W*$
或
\b\w+(?=\W*$)
(?=\W*$)
正向先行断言,该断言断言匹配的\W+
后面必须紧跟\W*
,零个或多个非单词字符,并进一步紧跟行尾
示例:
> var s = "www.mysite.com/match-last-word/"
undefined
> s.match(/\b\w+(?=\W*$)/)[0]
'word'
您尝试的操作不起作用,因为$表示行的结尾,因此您不能有/在它之后。如果您通过将/*移动到$之前来更正它,那么它应该按照您尝试的方式工作:
var match = (location.search.match(/(\w+)\/*$/))
? location.search.match(/(\w+)\/*$/)[0]
: "";
您尝试的操作不起作用,因为$表示行的结尾,因此您不能有/在它之后。如果您通过将/*移动到$之前来更正它,那么它应该按照您尝试的方式工作:
var match = (location.search.match(/(\w+)\/*$/))
? location.search.match(/(\w+)\/*$/)[0]
: "";
您试图在
$
之后匹配某个内容(在本例中代表主题的结尾),而您应该在以下内容之前匹配:
location.search.match(/(\w+)\/?$/)
我已将匹配设置为可选,以便它可以匹配尾随斜杠,也可以不匹配尾随斜杠。要查找匹配的单词,请执行以下操作:
location.search.match(/(\w+)\/?$/)[1];
例如:
'?text=word/'.匹配(/(\w+)\/$/)
[“word/”,“word”]
您试图在$
之后匹配某个内容(在本例中代表主题的结尾),而您应该在以下内容之前匹配:
location.search.match(/(\w+)\/?$/)
我已将匹配设置为可选,以便它可以匹配尾随斜杠,也可以不匹配尾随斜杠。要查找匹配的单词,请执行以下操作:
location.search.match(/(\w+)\/?$/)[1];
例如:
'?text=word/'.匹配(/(\w+)\/$/)
[“word/”,“word”]
试试这个:
var match = (location.search.match(/(\w+|\w+\/)$/))
? location.search.match(/(\w+|\w+\/)$/))[0]
: "";
试试这个:
var match = (location.search.match(/(\w+|\w+\/)$/))
? location.search.match(/(\w+|\w+\/)$/))[0]
: "";
location.search
提供url的查询参数。如果url是example.com/whatever/?q=123&name=something
,则location.search将提供问号后面的所有内容。但是,如果url类似于example.com/whatever/
,那么location.search将不会提供任何信息。因此,当您执行location.search.match()
时,您正在搜索不存在的内容
如果要可靠地查找路径名(example.com/asdf/targetword)中的最后一个单词,请使用以下命令:
location.pathname.match(/[^\/]+($)(?=\/$)/i)[0]
基本上,它在url路径中查找最后一组非斜杠字符
如果它是连字符的,也可以这样做。例如,
example.com/asdf/longer title/
将为您提供更长的标题
位置。search
为您提供url的查询参数。如果url是example.com/whatever/?q=123&name=something
,则location.search将提供问号后面的所有内容。但是,如果url类似于example.com/whatever/
,那么location.search将不会提供任何信息。因此,当您执行location.search.match()
时,您正在搜索不存在的内容
如果要可靠地查找路径名(example.com/asdf/targetword)中的最后一个单词,请使用以下命令:
location.pathname.match(/[^\/]+($)(?=\/$)/i)[0]
基本上,它在url路径中查找最后一组非斜杠字符
如果它是连字符的,也可以这样做。例如,
example.com/asdf/longer title/
将为您提供更长的标题
它可能不起作用,因为\/*
出现在锚定之后,$
。美元符号表示字符串的结尾,因此在它后面加上任何东西都可能导致正则表达式以意外的方式运行。它可能不起作用,因为\/*
出现在锚点$
之后。美元符号表示字符串的结尾,因此在后面加上任何符号都可能导致正则表达式以意外的方式运行。您的符号是唯一有效的符号,因为另一个符号也与/
匹配。谢谢,你能简单地解释一下?=
在这个正则表达式中做了什么吗?@alexchenco这是一个前瞻性断言,这意味着匹配是在不成为匹配本身的一部分的情况下执行的;优点是您不需要内存捕获(如我的回答中所述)。您的内存捕获是唯一有效的,因为另一个内存捕获也与/
匹配。谢谢,你能简单地解释一下?=
在这个正则表达式中做了什么吗?@alexchenco这是一个前瞻性断言,这意味着匹配是在不成为匹配本身的一部分的情况下执行的;优点是不需要内存捕获(如我的回答中所示)。