经典JavaScript正则表达式实战(附pdf)(6)


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


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

基本正则:

/<title>[\s\S]*?<\/title>/gi
首先是title标签,内容为任意字符若干个,然后是title结束标签。这个正则已经能匹配到所有的title标签。

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

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

/<title>[^<>]*?<\/title>(?!\s*<\/channel>)/gi(?!\s*<\/channel>)表示要匹配字符串的后面不能跟着若干个空格和一个channel的结束标签。

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

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

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

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

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

下面是lexrus的正则:

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

[a-z]+(?=[0-9])

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

[0-9]+(?=[a-z]

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

[a-z0-9]+

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

复制代码 代码如下:


<script type="text/javascript">
function istrue(str){
var reg=https://www.jb51.net/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig;
return reg.test(str);
}
var str? = 'AaBc';
var str2 = 'aaa123';
var str3 = '123dd';
var str4 = '1230923403982';
document.write(istrue(str)+'<br />');
document.write(istrue(str2)+'<br />');
document.write(istrue(str3)+'<br />');
document.write(istrue(str4)+'<br />');
</script>


结果为:

false,true,false,false

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

修改之后的正则如下:

/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i意思和上面差不多,但是没有使用正向预查,测试代码如下:

复制代码 代码如下:


<script type="text/javascript">
function istrue(str){
var reg=https://www.jb51.net/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i;
return reg.test(str);
}
var str? = 'AaBc';
var str2 = 'aaa123';
var str3 = '123dd';
var str4 = '1230923403982';
document.write(istrue(str)+'<br />');
document.write(istrue(str2)+'<br />');
document.write(istrue(str3)+'<br />');
document.write(istrue(str4)+'<br />');
</script>


结果为

false,true,true,false

正确。

空格与英文同时存在
来源:正则问题请指教啊!

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

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

/^(([a-z]+\s+)|(\s+[a-z]+))[a-z\s]*$/i英文开头加空格,或者是空格开头加英文,后面可以是英文或者空格。测试代码如下:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wfydjs.html