手机版

用JavaScript正则表达式解析URL的技巧

时间:2021-09-19 来源:互联网 编辑:宝哥软件园 浏览:

正则表达式是描述字符模式的对象。

首先,本文并没有直接告诉你url的正则表达式是什么,以及如何使用这个正则表达式解析URL地址。相信很多这样的问题在网上都能找到。本文旨在教大家如何理解URL的正则表达式,以便在以后的工作中理解正则表达式,写出相对简单的规则。言归正传,我们来看一下这个例子:

/^(?([A-Za-z] ):(\/{0,3})([0-9.\-A-Za-z])(?(\d))?(?\/([^?#]*))?(?\?([^#]*))?(?#(.*))?$/;/^(?([A-Za-z] ):(\/{,})([-.\-A-Za-z])(?(\d))?(?\/([^?#]*))?(?\?([^#]*))?(?#(.*))?$/;var URL=' http://qiji . kerlai . net :/GoodsBasic/Operate/?q # simen ';var result=parse _ URL . exec(URL);var name=[' URL ',' scheme ','斜杠',' host ',' port ',' path ',' query ',' hash '];对于(var I=;一.姓名.长度;I){ console . log(name[I]' : ' result[I]);}//输出结果/* URL :http://qiji . kerlai . net :/goodsbasic/oper/?Q # Simen方案: HTTP Slash ://host : qiji . kerlai . net端口:路径:商品基本/操作/查询: Q Hash : Simen */我们先来看看结果:

URL :http://qiji 123 . kerlai . net :81/GoodsBasic/Operate/12678?q # simenschem : httplash 3360//host : qiji 123 . kerlai . net port :81 path : goodsbasic/Operate/12678 query: qhash 3360 dimen

代码中设置的结果数组是【' http://qiji 123 . kerlai . net :81/goodsbasic/oper/12678?q#simen ',' http ','//',' qiji123.kerlai.net ',' 81 ',' GoodsBasic/Operate/12678 ',' q ',' simen']

现在我们试着把从第二个到最后一个的结果一个个链接起来,结果是:‘http//qiji 123 . kerlai . net 81 goods basic/operate/12678 qsi men’比原来的url少了‘:’。# '和其他链接。这是为什么?说到这里,我们就要介绍一个正则表达式的概念,就是正则表达式的分组。正则表达式有四组:捕获类型、飞行捕获类型、正向正匹配和正向负匹配。在这里,我将重点介绍前两种类型,后两种类型可以用来补脑。其中,非捕获类型不会出现在结果数组中,用()括起来的组会在结果数组中占据一个位置。如果正则表达式没有用括号括起来,匹配的字符将不会出现在exec()方法返回的数组中。的常规分组用()括起来,称为分组。

1.强制分组: (.)

2.非捕获分组:(?)

3.正向和正向匹配:(?=.)

4.正反匹配:(?.)

接下来,让我们分解正则表达式parse_url,第一个分组。

1.指示字符串的开头。

整个正则因子匹配一个协议名:http。

2、(?3360)表示非捕获分组:此括号中但不在其子括号中的匹配字符将不会放入结果数组中。

3.()表示捕获分组,此括号中匹配的字符被放入结果数组中相应url的:http字符中。

4.[]是一个正则表达式类,这意味着它匹配括号中的任何字符。

7.A-Za-z表示字母A到字母Z,字母A到字母Z[A-Za-Z]表示匹配字母A到Z和字母A到Z的任何字符。

5.表示商品匹配一次多次。

6、指示该组是可选的匹配条件。

第二个常规因子:(\/{0,3})://

强制分组,/表示应该匹配的,{0,3}表示将匹配0次或1到3次。

([0-9.\-A-Za-z]): qiji 123 . kerlai . net

强制分组,由一个或多个数字组成。“\-”(转义成“-”)、字母a到z和字母a到z。

(?(\d))?81

前缀:当放在非捕获分组中时,它不会出现在返回数组中,\d表示匹配的数字。整个因素是匹配前缀:后跟一个或多个数字。该分组因子是可选的。

(?\/([^?#]*))?GoodsBasic/Operate/12678

这种分组以/开头,其中“非”表示“除”?除#以外的最后一个字符?指示此常规因子分组是可选的。

(?\?([^#]*))?q

分组表示包含0个或更多非#字符。

(?#(.*))?西蒙

分组以#、和()开头。)将匹配除终止符之外的所有字符。

$表示该字符串的结尾。

至此,已经分析了所有组的网址。接下来,你可以写电话号码的正则表达式:它可以匹配固定电话和移动电话号码(这将使用新的字符:|)。

字符含义\用作音译,即通常对“\”后的字符不按本义解释,例如/b/与字符“b”匹配,当/\b/加在b前面时,音译意味着匹配一个单词的边界。-or-还原正则表达式的功能字符,例如,' * '匹配其先前的元字符0次或更多次,/a*/将匹配a、aa和AAA,/a\*/将仅在添加“\”后匹配“a*”。

匹配输入或行首,/A/匹配“A”而不是“an A”$匹配输入或行尾,/a$/匹配“An A”而不是“A”*匹配前面的元字符0次或更多次,/ba*/将匹配b、ba、baa、baa。匹配前面的元字符0次或1次,/ba*/match b,ba (x) match x,将x保存在名为$1的变量中.$9,x|y match x或y {n}精确匹配n次{n,}匹配n次以上{n,m}匹配n-m次[xyz]字符集,匹配此集中的任何字符(或元字符)[XYZ]不匹配此集中的任何字符[\b]匹配一个退格字符\b匹配一个单词的边界\b匹配一个单词的非边界\cX这里,x是一个控制字符,/\cM/matches Ctrl-M \d匹配一个单词字符,/\。d匹配非单词字符,/\ d/=/[0-9]/\ n匹配换行符\r匹配回车符\s匹配空白字符,包括\ n,\r,\f,\t,\v等。\S匹配一个非空白字符,等于/[ W匹配一个可以组成单词的字符(字母数字,这是我的意译,包括数字),包括下划线。例如,[\w]匹配5 in' $5.98 ',等于[a-za-z0-9]。\ w匹配不能构成单词的字符,例如,[\W]匹配' $5 '。re=new regexp ('pattern ',['flags'])的方法更好,pattern :正则表达式flag 3360g(全文搜索中出现的所有模式)I(忽略大小写)m(多行搜索)。

VaScript动态正则表达式问题。

正则表达式可以动态生成吗?例如JavaScript中的: var str=' strTemp要生成: var re=/STrteMP/;如果是: var re='/' str '/'的字符连接,但是要生成表达式,能实现吗?如何实现?

版权声明:用JavaScript正则表达式解析URL的技巧是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐