学习正则表达式和jquery – .match返回什么?
alert($(this)[0]);
返回一个url,例如。 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]);
试试这个:
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"]
编辑以便为您分解正则表达式:
-
[]
是一个字符类,无论它有多少内容,都只能匹配一个字符。 - 例如,
[az]
将匹配任何单个小写字母字符。 - 字符类开头的
^
(插入符号)是非标识符。 指示此字符类具有相反的效果 – 它将匹配与其余内容不匹配的任何单个字符。 这个位置(字符类中的第一个字符)是插入符号表示“不”的唯一时间。 在其他情况下,它具有不同的含义(例如,在正则表达式的开头,^
将指示字符串的开头必须从那里开始)。 - 因此,我们的字符类
[^\?]
表示我们将匹配任何不是问号的单个字符 - \ asterisk总是表示“前面的语句为零或更多”,所以当你试图用*表示“在这里做任何事情”时你实际在做的是复制\? 零次或多次 – 向口译员说“我想要一个问号零次或多次”。 您的
alert(x[0])
应该输出一个空对话框,稍后会有更多信息 - 在我们的例子中,星号正在检查任何非问号,零次或多次。
- reg-ex末尾的
$
表示“字符串结束”,这意味着…当然,字符串的结尾必须在那一点。
因此,我们知道正则表达式不会从您的url收集问号,因为它仍然无法在收集多个非问号时触及字符串的末尾。 除非另有说明,否则*
总是贪婪的,因此它将获得尽可能多的字符。
您的警报(x [0])应该输出一个空警报(我测试了它,它确实为我做了),因为.match()方法匹配它可以做的第一件事,因为/\?*/
几乎匹配每一个字符串在看到第一个角色并说“哦,这里有匹配!”之后,它一定已经停止了。
希望这对你的理解很有帮助:)当你开始使用时,正则表达式可能令人困惑,但我绝对喜欢它们。 如此强大。
> "http://localhost/www/anotherdir/go.php?id=12aaa&more=123".match(/\?id=(\d+)(\w+)/); > ["?id=12aaa", "12", "aaa"]
正则表达式/\?*/
匹配零个或多个问号。 这适用于URL开头的空字符串,因此正则表达式引擎返回一个空字符串。 显然不是你的想法。
您可以使用/[^?]*$/
匹配最后一个后面的内容?
在字符串中(如果没有?
则为整个字符串)。
你在找这样的东西吗?
var hash = window.location.hash; alert(hash);
因为空警报(如alert())在Firefox中根本不显示警报。 你还应该考虑使用document.location.search访问你的参数,而不是这个奇怪的$(this)[0]