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


<script type="text/javascript">
function istrue(str){
var reg=https://www.jb51.net/^(([a-z]+\s+)|(\s+[a-z]+))[a-z\s]*$/i;
return reg.test(str);
}
var str? = 'asdf';
var str2 = 'sadf sdf';
var str3 = 'asdf ';
document.write(istrue(str)+'<br />');
document.write(istrue(str2)+'<br />');
document.write(istrue(str3)+'<br />');
</script>


利用这个思路也可以实现英文空格英文,英文单词多于两个的匹配。同样,也可以把英文字母换成单词字符\w。

显示或者保存正则表达式匹配的部分内容
有如下电话号码:

13588888333
13658447322
13558885354
13587774654
13854554786

要求,要求只匹配135开头的电话,但是匹配结果只保留135后面的数字。

由于JavaScript里的正则不支持(?=xx)xxx的模式,只支持xxx(?=xx)的模式。所以只能将135后面的内容作为一个子正则表达式匹配的内容,然后再在后面引用。

Carl给出的函数如下:

复制代码 代码如下:


function f(phoneNumber) {
var pattern = /^(135)(\d{8})$/;
if(pattern.test(phoneNumber))
return phoneNumber.replace(pattern,"$2");
else
return "不是135打头的手机号码!";
}


/^(135)(\d{8})$/ 正则中,135作为开头表示第一个子正则表达式,第二个括号内的子正则表达式则匹配后面的8个数字,然后在replace中使用$2就可以引用这个子正则表达式匹配的内容了。测试代码如下:

复制代码 代码如下:


<script type="text/javascript">
function f(phoneNumber) {
var pattern = /^(135)(\d{8})$/;
if(pattern.test(phoneNumber))
return phoneNumber.replace(pattern,"$2");
else
return "不是135打头的手机号码!";
}
var arr = new Array(
"13588888333",
"13658447322",
"13558885354",
"13587774654",
"13854554786"
);
for(var i = 0; i < arr.length; i++)
document.write(f(arr[i])+'<br />');
</script>


正则表达式替换变量
来源:求教正则

有一个数组:

var _A = ['A','B','C','D'];

有一个有“变量”的字符串。

var _B = '<ul><li>$0$</li><li>$1$</li><li>$2$</li><li>$3$</li></ul>';

说是变量,其实只是字符串中的特殊字符,例如$0$,就称这个为伪变量吧。

最后的要求就是使用正则获得下面这样一个字符串:

_C = '<ul><li>A</li><li>B</li><li>C</li><li>D</li></ul>';

IamUE给出了代码:

复制代码 代码如下:


<script type="text/javascript">
var _A = ['A','B','C','D'];
var _B = '<ul><li>$0$</li><li>$1$</li><li>$2$</li><li>$3$</li></ul>';
var reg=https://www.jb51.net/\$\d+\$/ig;
C=_B.replace(reg,function($1){
var indexnum=$1.replace(/\$/ig,"");
if (indexnum<_A.length)
{return _A[indexnum];}
else{return ""}
});
alert(C);
</script>


代码分析:看到代码之后感觉有点晕,首先,正则reg中没有任何的括号,应该是没有捕获内容的,那么后面怎么又使用$1了引用了呢?通过alert测试,发现它是整个正则匹配的内容,而且不一定要写作$1,可以写为$0,甚至是写为x都没关系,它总是整个匹配。

第一次,$1匹配到_B中的“$0$”,匿名函数中将它的$去掉,变成了0,检查是否越界之后,用这个0作为下标去访问数组_A。

由于正则reg定义了g属性,所以会继续替换$1$、$2$等等。步骤都和上面一样。

正则替换指定属性中的文本
来源:怎样用正则来查找替换?

有如下代码:

<td><img src="../photo/ccg/thumbnails/O'Malley's West_jpg.gif"><br>
O'Malley's West</td>

要求将所有onclick属性中的'替换成\',也就是将单引号转义。

首先,需要匹配onclick属性:

/onclick\s*=\s*"https://www.jb51.net/article/.+?"/ig然后再将所有的'都替换成\'就可以了。

将阿拉伯数字替换为中文大写形式
来源:正则问题

将123替换成壹贰叁。

只要匹配一个数字就可以了,测试代码如下(如果显示为乱码就调整一下浏览器的字符编码):

复制代码 代码如下:


function replaceReg(reg,str){
return str.replace(reg,function(m){return arr[m];})
}
arr=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var reg = /\d/g;
var str = '13889294444';
var str2 = '12889293333';
var str3 = '23445567';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');


替换文本中的URL为链接
来源:求一链接替换正则

将一个用户输入的一段文字中的url替换成可以点击的link地址。例如:可以替换成 [url][/url]

或<a href="https://www.cctv.com"> blueidea.com</a>.

这个正则的关键就在于匹配链接,匹配之后,在两边加上a标签和属性不是问题。

/http:\/\/[\w-]*(\.[\w-]*)+/ig首先匹配。

[\w-]*是可能的www和bbs等。

\.[\w-]*匹配.xxx形式,至少有一个。

测试代码如下:

复制代码 代码如下:

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

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