加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

JavaScript中常用的正则表达式日常整理(全)

发布时间:2016-11-29 03:31:47 所属栏目:大数据 来源:站长网
导读://校验是否全由数字组成 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return false return true } 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉

测试代码如下:

lt;script type="text/javascript"gt; 
function anchorText(str){ 
var reg =/lt;as(#63;:s*w*#63;s*=s*".+#63;")*(#63;:s*hrefs*=s*".+#63;")(#63;:s*w*#63;s*=s*".+#63;")*s*gt; 

([sS]*#63;)lt;/agt;/; 
str = str.replace(reg,'$1'); 
return str; 
} 
var str = 'lt;a id = "test" href="http://bbs.blueidea.com" title="无敌"gt;经典论坛lt;/agt;'; 
document.write(anchorText(str)); 
lt;/scriptgt;

正则判断标签是否闭合

来源:求助 超难!正则表达式如何判断一个标签是否闭合

例如:lt;img xxx=”xxx” 就是没有闭合的标签;

lt;pgt;p的内容,同样也是没闭合的标签。

从简单的正则开始,先匹配起始标签

/lt;[a-z]+/i 再加上若干属性:

/lt;[a-z]+(s*w*#63;s*=s*".+#63;")*/i 下面就到关键点了,标签的闭合。标签可能有两种方式闭合,lt;img xxx=”xxx” /gt;

或者是lt;pgt;xxx lt;/pgt;。

(s*/gt;)

匹配img类的结束,即/gt;。

(s*#63;gt;[sS]*#63;lt;/1gt;)

匹配p类标签的结束标签。gt;是其实标签末尾,之后是标签内容若干个任意字符,最后的lt;/1gt;就是结束标签了。

加上一个或就可以解决了,最后的完整正则表达式:

整个正则:

/lt;([a-z]+)(s*w*#63;s*=s*".+#63;")*(s*#63;gt;[sS]*#63;lt;/1gt;|s*/gt;)/i 拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例如

lt;divgt;aaaaaalt;divgt;testlt;/divgt;

也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在匹配结果中检查是否成对。正则如下:

/lt;([a-z]+)(s*w*#63;s*=s*".+#63;")*(s*#63;gt;[sS]*#63;(lt;/1gt;)+|s*/gt;)/i 用正则获得指定标签的内容
来源:求一正则

有如下代码:

lt;channelgt;
lt;titlegt;蓝色理想lt;/titlegt;
lt;/channelgt;
lt;itemgt;
lt;titlegt;界面设计测试规范lt;/titlegt;
lt;/itemgt;
lt;itemgt;
lt;titlegt;《古典写实美女》漫画教程lt;/titlegt;
lt;/itemgt;
lt;itemgt;
lt;titlegt;安远――消失的光年lt;/titlegt;
lt;/itemgt;
lt;itemgt;
lt;titlegt;asp.net 2.0多语言网站解决方案lt;/titlegt;
lt;/itemgt;

nbsp;要求匹配item里的title而不匹配channel里的title。

基本正则:

/lt;titlegt;[sS]*#63;lt;/titlegt;/gi 首先是title标签,内容为任意字符若干个,然后是title结束标签。这个正则已经能匹配到所有的title标签。

首先,我简单地修改了一下原正则:

/lt;titlegt;[^lt;gt;]*#63;lt;/titlegt;/gi, 因为title里面不应该再嵌有其它标签,这个正则同样是匹配所有标题的内容,最后再加上不去匹配channel中的title。整个正则如下:

/lt;titlegt;[^lt;gt;]*#63;lt;/titlegt;(#63;!s*lt;/channelgt;)/gi (#63;!s*lt;/channelgt;)表示要匹配字符串的后面不能跟着若干个空格和一个channel的结束标签。

原帖里有很方便的测试工具,这里就不给测试代码了。

正则判断是否为数字与字母的混合
来源:关于正则

不能小于12位,且必须为字母和数字的混合。

验证字符串包含数字简单,验证字符串包含字母也简单,验证字符串不包含其它字符也简单,可以用这三个正则分别检查一次字符串,逻辑运算出最终结果。

但是怎么能把这些功能写进一个正则表达式里呢?这个问题真有点伤脑筋。

下面是lexrus的正则:

/^([a-z]+(#63;=[0-9])|[0-9]+(#63;=[a-z]))[a-z0-9]+$/ig 思路非常的清晰啊:

[a-z]+(#63;=[0-9])

字母开头,后面必须紧跟着数字。

[0-9]+(#63;=[a-z]

数字开头,后面必须紧跟着字母。

[a-z0-9]+

后面的字符只要是数字或者字母就可以了。经过测试,发现不好使,123dd会被识别为不合法,dd123则为合法,可见“数字开头,紧跟字母”的正则没有起作用。测试代码如下:

lt;script type="text/javascript"gt; 
function istrue(str){ 
var reg=/^([a-z]+(#63;=[0-9])|[0-9]+(#63;=[a-z]))[a-z0-9]+$/ig; 
return reg.test(str); 
} 
var str#63; = 'AaBc'; 
var str2 = 'aaa123'; 
var str3 = '123dd'; 
var str4 = '1230923403982'; 
document.write(istrue(str)+'lt;br /gt;'); 
document.write(istrue(str2)+'lt;br /gt;'); 
document.write(istrue(str3)+'lt;br /gt;'); 
document.write(istrue(str4)+'lt;br /gt;'); 
lt;/scriptgt; 

结果为:

false,true,false,false

结果中的第三个,将'123dd'判断为非法是错误的。刚开始以为是g的问题,去掉了还是不好使。应该是浏览器bug,我认为lexrus的正则是正确的,可能是浏览器无法处理或”|”的两边都包含正向预查(#63;=)。

修改之后的正则如下:

/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i 

意思和上面差不多,但是没有使用正向预查,测试代码如下:

lt;script type="text/javascript"gt; 
function istrue(str){ 
var reg=/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i; 
return reg.test(str); 
} 
var str#63; = 'AaBc'; 
var str2 = 'aaa123'; 
var str3 = '123dd'; 
var str4 = '1230923403982'; 
document.write(istrue(str)+'lt;br /gt;'); 
document.write(istrue(str2)+'lt;br /gt;'); 
document.write(istrue(str3)+'lt;br /gt;'); 
document.write(istrue(str4)+'lt;br /gt;'); 
lt;/scriptgt;

nbsp;结果为

false,true,true,false

正确。

空格与英文同时存在

来源:正则问题请指教啊!

匹配英文以及空格,要求必须既有英文字母又有空格。

这个思路和上面的差不多,只要把数字改成空格就可以了。正则如下:

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读