如何用javascript选择art-8,而不是cart-8

时间:2010-10-31 20:39:15

标签: javascript regex

我在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){

...............

我需要正则表达式吗?

提前致谢。

4 个答案:

答案 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-8art-80匹配。

\b匹配单词和非单词字符(或字符串的开头/结尾),其中单词字符(在JavaScript中)定义为[A-Za-z0-9_]

这种方法的优点是,如果您正在寻找的字符串周围没有字符,它也会起作用。