学习正则表达式和jquery - .match返回什么?

时间:2011-03-25 16:04:40

标签: jquery regex

alert($(this)[0]);会返回一个网址,例如。 http://localhost/www/anotherdir/go.php?id=12aaa

我希望将“12”和“aaa”放在单独的变量中(引用的val可以是任何东西,但总是一个数字后跟三个alpha)。

使用正则表达式/\?*在正则表达式编辑器中返回id = 12aaa,但是......

这不会生成一个alert()框 - 根本不会发生任何事情:

x = $(this)[0].match(/\?*/);
alert(x);

这也没有做任何事情:

x = $(this)[0].match(/\?*/);
alert(x[0]); 

5 个答案:

答案 0 :(得分:5)

试试这个:

var x = $(this)[0].match(/[^\?]*$/);
alert(x[0]);

假装$(this)[0]返回“/ my / fun / path?query1 = a& query2 = b 请注意,x将是数组["query1=a&query2=b"]

例如,如果您希望将每个查询参数作为数组中的索引,则可以执行此操作:

var params = $(this)[0].match(/[^\?]*$/)[0].split('&');

哪个会给你:

["query1=a", "query2=b"]

编辑以便为您分解正则表达式:

  • []是一个字符类,只能匹配一个字符,无论它有多少内容。
  • 例如,
  • [a-z]将匹配任何单个小写字母字符。
  • 字符类开头的^(插入符号)是非标识符。指示此字符类具有相反的效果 - 它将匹配与其余内容不匹配的任何单个字符。这个位置(字符类中的第一个字符)是插入符号表示“不”的唯一时间。在其他情况下,它具有不同的含义(例如,在正则表达式的开头,^将指示字符串的开头必须从那里开始。)
  • 因此,我们的角色等级[^\?]表示我们会匹配一个问号的任何单个字符
  • 星号总是表示“前面的语句为零或更多”,所以当你试图用*来表示“这里的任何东西”时你实际在做的是复制\?零次或多次 - 向口译员说“我想要一个问号零次或多次”。您的alert(x[0]) 应该输出一个空白对话框,稍后会详细介绍
  • 在我们的例子中,星号正在检查任何非问号,零次或多次。
  • reg-ex末尾的$表示“字符串结束”,这意味着...当然,字符串的结尾必须在那一点。

因此我们知道正则表达式不会从您的网址收集问号,因为它仍然无法在收集多个非问号时触及字符串的末尾。除非另有说明,*总是贪婪的,所以它会获得尽可能多的字符。

你的警报(x [0])应该输出一个空警报(我测试了它,它确实为我做了),因为.match()方法匹配它可以做的第一件事,因为/\?*/几乎匹配在看到第一个角色并说“哦,这里有匹配!”之后,每一根弦都可能已经停止了。

希望这对你的理解很有帮助:)当你开始使用时,正则表达式可能令人困惑,但我绝对喜欢它们。太强大了。

答案 1 :(得分:2)

> "http://localhost/www/anotherdir/go.php?id=12aaa&more=123".match(/\?id=(\d+)(\w+)/);
> ["?id=12aaa", "12", "aaa"]

答案 2 :(得分:0)

正则表达式/\?*/匹配零个或多个问号。这适用于URL开头的空字符串,因此正则表达式引擎返回一个空字符串。显然不是你的想法。

您可以使用/[^?]*$/来匹配字符串中最后?之后的内容(如果没有?,则匹配整个字符串)。

答案 3 :(得分:0)

你在找这样的东西吗?

var hash = window.location.hash;
alert(hash);

答案 4 :(得分:0)

因为空警报(如alert())在Firefox中根本不显示警报。 你还应该考虑使用document.location.search访问你的参数,而不是这个奇怪的$(this)[0]