匹配url的正则表达式

在javascript语言精粹 看到url的正则,将其记录下来

var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;

var url = "http://www.ora.com:80/goodparts?q#fragment";

执行 具体代码见下述:

var url = "http://www.ora.com:80/goodparts?q#fragment";
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var result = parse_url.exec(url);
var names = [‘url‘,‘scheme‘,‘slash‘,‘host‘,‘port‘,‘path‘,‘query‘,‘hash‘];
var blanks = ‘ ‘;
var i;
for (i = 0; i < names.length; i += 1){
  document.writeln(names[i] + ‘:‘ + blanks.substring(names[i].length), result[i]);
}

执行结果:

url: http://www.ora.com:80/goodparts?q#fragment
scheme: http
slash: //
host: www.ora.com
port: 80
path: goodparts
query: q
hash: fragment

关于上述url的正则的部分解释:

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

1.^表示开始   $表示结尾

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

2. (?:pattern) 表示匹配pattern但不获取匹配结果

(?:([A-Za-z]+):) 则表示匹配 ([A-Za-z]+): ,但只返回匹配到的([A-Za-z]+)的结果,并不返回:

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

3. \*{3},因为*是特殊字符,所以用转义字符,该表达式表示匹配3个*,即***

同理\/{0,3}表示匹配0到3个/,即没有/或者/, //, ///

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

4. 方括号中的^表示 非 的意思

[^?#] 则表示 非 ? 且 非 # 的其他字符

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

* 匹配前一项0次或多次。即{0,}

?匹配前一项0次或1次。即{0,1}

时间: 2024-10-24 13:03:24

匹配url的正则表达式的相关文章

正确匹配URL的正则表达式

网上流传着多种匹配URL的正则表达式版本,但我经过试验,最好用的还是从stackoverflow上查到的: (https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|] IP地址.前后有汉字.带参数的,都是OK的. 另外几个有问题的版本: 摘自微软MSDN: (ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9

正则表达式匹配URL——给URL地址加上&lt;a&gt; 链接

<?php function replace_url ($content) { if (empty($content)) return; //给URL地址加上 <a> 链接 $preg = '/(?:http:\/\/)?([\w.]+[\w\/]*\.[\w.]+[\w\/]*\??[\w=\&\+\%]*)/is'; $content = preg_replace($preg, '<a href="http://\1" target="_b

js正则表达式之解析——URL的正则表达式

首先,此片文章并不是直接告诉你,url的正则表达式是什么,以及怎么使用这个正则表达式去解析一个URL地址,相信这种问题在网络上已经能找到很多.本文的宗旨在于教你如何理解URL的正则表达式,以达到理解正则表达式,以及能够在日后的工作中写出相对简单的正则.言归正传,先看看一下的例子: var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*)

java匹配中文的正则表达式

[\u4E00-\u9FA5]* public static void regxChinese(){ // 要匹配的字符串 String source = "<span title='5 星级酒店' class='dx dx5'>"; // 将上面要匹配的字符串转换成小写 // source = source.toLowerCase(); // 匹配的字符串的正则表达式 String reg_charset = "<span[^>]*?title=\'

正则匹配URL地址

/** * @ 匹配URL地址 */ function isURLAddress(url) { var urlreg=/^((https|http|ftp|rtsp|mms)?:\/\/)+[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/ if (!urlreg.test(url)){ return false }else{ return true; } }

读取csv文件和匹配时间的正则表达式

今天又和前端联调了一天的程序,比较烦.产品有个需求是日期和时间分开显示的,正常都是两个连在一起然后用空格隔开,因为要想校验时间的对错,就需要把传过来的时间用strtotime转换成时间戳,然后在用date转换成时间格式,但是若是传的时间格式不对,那么最后转换成的时间就是unix的初始时间08:00:00,这样存在一个问题就是万一活动的开始时间就是08:00:00呢?所以我就把日期和时间放在一起转成时间戳,因为不管日期还是是时间出错,只要有一个错的传换回来的日期已一定会是1970-01-01,所以

匹配url 添加为a标签

var reg = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/g; if(str.indexOf('<a href=')==-1){  // 过滤下a标签 str= str.replace(reg, "<a href='$1$2'>$1$2</a>"); } 2.文本换行处理 breakStr(str) { var regBr = /(\r\n)|(\n)|(\?)/g; str = str.toS

nginx利用location匹配url中?号后的参数

nginx利用location匹配url中?号后的参数 http://www.baidu.com/index.php?a=1&b=2location能匹配到url,但是匹配不到url后面的参数,例如:?a=1&b=2 需求:访问地址:https://www.aposoft.com/all-apowersoft/?from=edm 开发要求可不可以只是这个完整地址https://www.aposoft.com/all-apowersoft/?from=edm 跳转到404,然后https:/

正则表达式匹配URL

正则表达式: var match = /^((ht|f)tps?):\/\/([\w\-]+(\.[\w\-]+)*\/)*[\w\-]+(\.[\w\-]+)*\/?(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?/; /* 注:(1).如需允许其他联接方式,可以修改"(ht|f)tps?"部分,在"?"后面跟上符号"|",然后加上您需要的联接方式,多个时用符号"|"分隔).(2).如需允许URL参数包