JavaScript中正则表达式的反向预搜索实现

大多是应用正向预搜索情况。也就是说,在查找内容的右面有特定的内容限定;

例如下面的例子:

<script type="text/javascript">
var str3 = 'CPU: Intel Core2 5200; Memory: 2G;OS: Ubuntu 9.04';
var reg3 = /Memory\:\s+(.*(?=\;OS\:))/gim;
str3.match(reg3);
console.log(RegExp.$1); //结果是2G
</script>

(.*(?=\;OS\:) 就是典型的正向预搜索,只有右面内容是“;OS: ”才会被匹配到。

但是现在要实现的效果,左面的内容是固定,而不是右面。可是JavaScript并不支持反向预搜索。我相信,细心的朋友已经发现了,其实上面的例子已经达到了这个目的(前面的Memory\:\s+ 限定了左面的内容)。下面再给出一个例子:

<script type="text/javascript">
//目的,去掉图片路径中的域名
var str = '<img src="http://news.163.com/sports/yao.jpg" src="http://news.163.com/sports/yao.jpg">';
var reg1 = /(\<img)(.*(?=(http|https)\:\/\/))((http|https)\:\/\/[^\/]*)/gim;
str.match(reg1);
console.log(str.replace(RegExp.$4,''));
</script>

看看 ?: 的匹配不捕获;

<script type="text/javascript">
var str2 = '客户端名称';
var reg2 = /(客户端名(?:称)?)/;
str2.match(reg2);
console.log(RegExp.$1); //客户端名称
console.log(RegExp.$2); //空字符串
//不使用?:
reg2 = /(客户端名(称)?)/;
str2.match(reg2);
console.log(RegExp.$1); //客户端名称
console.log(RegExp.$2); //称
</script>

在简单的和不需要判断的正则里,没有必要用?:的;

但是如果您匹配格式后

还要判断内容,那就需要研究下?: 了;

比如您要写一个手机归属地的小DEMO;

不仅您要匹配当前输入的内容是不是正确的手机号码格式;

而且您还需要把用户输入的内容,按照 131 QQQQ XXXX 这种的匹配;

因为您可能会要用131来判断当前的运营商;

而且您还可能会把QQQQ来判断手机号码的归属地区;

~~

未经允许不得转载:WEB前端开发 » JavaScript中正则表达式的反向预搜索实现

赞 (0)