如何用JavaScript正则表达式巧妙解析URL?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1702个文字,预计阅读时间需要7分钟。
正则表达式是一种描述字符模式的对象。首先,本文并不直接告知您,curl的正规表达式是什么,以及如何使用这个正则表达式去解析一个URL地址。相信这类问题在网上已有解答。
正则表达式是一个描述字符模式的对象。
首先,此片文章并不是直接告诉你,url的正则表达式是什么,以及怎么使用这个正则表达式去解析一个URL地址,相信这种问题在网络上已经能找到很多。本文的宗旨在于教你如何理解URL的正则表达式,以达到理解正则表达式,以及能够在日后的工作中写出相对简单的正则。言归正传,先看看一下的例子:
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var parse_url = /^(?:([A-Za-z]+):)?(\/{,})([-.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; var url = "qiji.kerlai.net:/GoodsBasic/Operate/?q#simen"; var result = parse_url.exec(url); var names = ["url","scheme","slash","host","port","path","query","hash"]; for(var i=; i <names.length;i++){ console.log(names[i]+":"+result[i]); } //输出结果 /* url:qiji.kerlai.net:/GoodsBasic/Operate/?q#simen scheme: host:qiji.kerlai.net port: path:GoodsBasic/Operate/ query:q hash:simen */
我们先来看看结果:
url:qiji123.kerlai.net:81/GoodsBasic/Operate/12678?q#simen
scheme:
host:qiji123.kerlai.net
port:81
path:GoodsBasic/Operate/12678
query:q
hash:simen
代码中result数组的集合是['qiji123.kerlai.net:81/GoodsBasic/Operate/12678?q#simen','
捕获型分组,\/表示一个应该被匹配的/,{0,3}表示\将被匹配0次或者1到3次之间
([0-9.\-A-Za-z]+):qiji123.kerlai.net
捕获型分组,由一个或多个数字 ,“.”,”\-“(转义成”-“),字母A到Z和字母a到z组成
(?::(\d+))?:81
前置:放在非捕获型分组中将不会出现在返回数组中,\d表示匹配数字。整个因子就是匹配前置为:后面跟随一个或多个数字。此分组因子为可选的
(?:\/([^?#]*))?:GoodsBasic/Operate/12678
该分组由/开始,^在此处表示非的意思,即除?#之外的所有字符 最后一个?表示此正则因子分组可选
(?:\?([^#]*))? :q
该分组表示包含0个或多个非#字符
(?:#(.*))?:simen
该分组以#开始,(.)将匹配除结束符以外的所有字符。
$表示这个字符串结束。
到此就已经分析完url的所有分组。接下来大家可以写写电话号码的正则表达式:既能匹配固定电话有能匹配手机号(这个会用到新的字符:|)
做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。
用re = new RegExp("pattern",["flags"]) 的方式比较好 pattern : 正则表达式 flags: g (全文查找出现的所有 pattern) i (忽略大小写) m (多行查找)
vaScript动态正则表达式问题
请问正则表达式可以动态生成吗? 例如JavaScript中: var str = "strTemp"; 要生成: var re = /strTemp/; 如果是字符连接: var re = "/" + str + "/"即可
但是要生成表达式,可以实现吗?怎样实现?
本文共计1702个文字,预计阅读时间需要7分钟。
正则表达式是一种描述字符模式的对象。首先,本文并不直接告知您,curl的正规表达式是什么,以及如何使用这个正则表达式去解析一个URL地址。相信这类问题在网上已有解答。
正则表达式是一个描述字符模式的对象。
首先,此片文章并不是直接告诉你,url的正则表达式是什么,以及怎么使用这个正则表达式去解析一个URL地址,相信这种问题在网络上已经能找到很多。本文的宗旨在于教你如何理解URL的正则表达式,以达到理解正则表达式,以及能够在日后的工作中写出相对简单的正则。言归正传,先看看一下的例子:
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var parse_url = /^(?:([A-Za-z]+):)?(\/{,})([-.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; var url = "qiji.kerlai.net:/GoodsBasic/Operate/?q#simen"; var result = parse_url.exec(url); var names = ["url","scheme","slash","host","port","path","query","hash"]; for(var i=; i <names.length;i++){ console.log(names[i]+":"+result[i]); } //输出结果 /* url:qiji.kerlai.net:/GoodsBasic/Operate/?q#simen scheme: host:qiji.kerlai.net port: path:GoodsBasic/Operate/ query:q hash:simen */
我们先来看看结果:
url:qiji123.kerlai.net:81/GoodsBasic/Operate/12678?q#simen
scheme:
host:qiji123.kerlai.net
port:81
path:GoodsBasic/Operate/12678
query:q
hash:simen
代码中result数组的集合是['qiji123.kerlai.net:81/GoodsBasic/Operate/12678?q#simen','
捕获型分组,\/表示一个应该被匹配的/,{0,3}表示\将被匹配0次或者1到3次之间
([0-9.\-A-Za-z]+):qiji123.kerlai.net
捕获型分组,由一个或多个数字 ,“.”,”\-“(转义成”-“),字母A到Z和字母a到z组成
(?::(\d+))?:81
前置:放在非捕获型分组中将不会出现在返回数组中,\d表示匹配数字。整个因子就是匹配前置为:后面跟随一个或多个数字。此分组因子为可选的
(?:\/([^?#]*))?:GoodsBasic/Operate/12678
该分组由/开始,^在此处表示非的意思,即除?#之外的所有字符 最后一个?表示此正则因子分组可选
(?:\?([^#]*))? :q
该分组表示包含0个或多个非#字符
(?:#(.*))?:simen
该分组以#开始,(.)将匹配除结束符以外的所有字符。
$表示这个字符串结束。
到此就已经分析完url的所有分组。接下来大家可以写写电话号码的正则表达式:既能匹配固定电话有能匹配手机号(这个会用到新的字符:|)
做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。
用re = new RegExp("pattern",["flags"]) 的方式比较好 pattern : 正则表达式 flags: g (全文查找出现的所有 pattern) i (忽略大小写) m (多行查找)
vaScript动态正则表达式问题
请问正则表达式可以动态生成吗? 例如JavaScript中: var str = "strTemp"; 要生成: var re = /strTemp/; 如果是字符连接: var re = "/" + str + "/"即可
但是要生成表达式,可以实现吗?怎样实现?

