我在javascript中有以下if语句。我的目标是在网址中包含art-8的网页。
示例网址就是这样,
http://www.mywebsite.com/art-8.asp?id=435&iPageID=43
然而,这将使用cart-8获取一个网址,我不希望这样。
我只想在网址中选择art-8而不是购物车-8。
我应该如何改变它?
if (location.pathname.indexOf('art-8') > 0){
...............
我需要正则表达式吗?
提前致谢。
答案 0 :(得分:1)
if (/\/art-8\/?$/.test(location.pathname)) {
...
}
将匹配以/art-8
或/art-8/
结尾的任何路径名。或者将路径名拆分为其组成部分:
var parts = location.pathname.split('/').slice(1);
if(parts[parts.length - 1] == '') parts = parts.slice(0, -1);
if(parts[parts.length - 1] == 'art-8') {
...
}
编辑:如果art-8
不需要在最后,但在它之前有一个斜杠:
if (/\/art-8/.test(location.pathname)) {
...
}
或者如果之前不一定有斜杠,但你只想在它之前没有art-8
寻找c
(路径名总是以斜线开头,所以总会有之前至少有一个角色,这将有效):
if (/[^c]art-8/.test(location.pathname)) {
...
}
请注意,路径名不包含?
及其后面的内容,因此即使我提供的前两个示例也适用于您在.asp
之后添加8
时提供的特定示例网址{1}}。
答案 1 :(得分:0)
这个正则表达式怎么样?
[^c]art-8
答案 2 :(得分:0)
如果您只关注单个路径段,并且只想找到至少包含一个完全等于'art-8'的路径段的路径,那么您可以这样做:
if (location.pathname.indexOf('/art-8/') > 0) {
适用于所有情况除了'art-8'结尾的情况,没有尾部斜杠。您可以为特殊情况添加另一个检查,不带尾部斜杠,并包括检查以确保索引将其放在行尾。
但如果您使用的是现代浏览器,并且支持RegExp,那么您只需要:
var rx=new RegExp("/art-8(/|$)");
if( rx.test(location.pathname) ) {
...
}
w3schools的javascript RegExp对象有fairly comprehensive reference
答案 3 :(得分:0)
正则表达式的方式是使用单词边界锚:
/\bart-8\b/
只会与art-8
匹配,而不会与cart-8
或art-80
匹配。
\b
匹配单词和非单词字符(或字符串的开头/结尾),其中单词字符(在JavaScript中)定义为[A-Za-z0-9_]
。
这种方法的优点是,如果您正在寻找的字符串周围没有字符,它也会起作用。