正则表达式入门教程第二篇

第五节 位置匹配

5.1 单词边界

\b 匹配一个单词边界,即字与空格间的位置。

var r = "my name is ischijiandelongtaoisisisisisisshijiandelongtao";
r = r.match(/\bis\b/)
console.log(r);
5.2 字符串边界

^定义字符串开头,$定义字符串结尾

//^有多种用途 用在 [^]  里表示求非,用在 ^[]外面表示取[]里的某一字符为第一个字符 ^[0-9] 取0-9中某一字符为第一个字符。
var r = "my name is mychijiandelongtao";
//^my 表示符查找字符串开始处的my,
r = r.match(/^my/g); 
console.log(r);
//$使用和^一样,只是位置不同。
5.3 分行匹配模式 (?m)

javascript 里面仿佛没有 java里可以这么写


String str = "my \n"
	    	+ "my \n"
	    	+ "my \n"
	    	+ "myTest";
//(?m)以换行符分割字符串
Pattern pattern = Pattern.compile("(?m)^my");  
//Pattern pattern = Pattern.compile("^my");  
Matcher matcher = pattern.matcher(str);
while(matcher.find())
{
	System.out.println(matcher.group());
}

第六节 使用子表达式 (当作独立元素)

6.1子表达式

语法是 (text)

var A= "  ";
A = A.match(/ {2,}/g);
console.log(A);
//这样是匹配不到的 {2,}只作用于 的';' 
//需要是使用子表达式解决该问题
var A= "  ";
A = A.match(/( ){2,}/g);
console.log(A);

var A = "匹配一个ip地址 : 192.168.111.110";
A = A.match(/\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}/g);
console.log(A);
//等同于
A = A.match(/(\d{1,3}\.){3}\d{1,3}/g);
// (\d{1,3}\.){3} 表示 \d{1,3}\.重复三次
console.log(A);
var A = "1972-10-12";
//该语句只能匹配19,因为 | 符号 把20\d{2}看作整体
A = A.match(/19|20\d{2}/g);
console.log(A);

//应改为
A = A.match(/(19|20)\d{2}/g);
console.log(A);
6.2子表达式嵌套

把必须匹配的情况考虑周全,并写出一个匹配结果符合预期的正则很容易,
但把不需要匹配的情况也考虑周全并确保它们都将被排除在匹配结果以外往往要困难的多,写正则时一定要把需要匹配的和不需要匹配的详细定义清楚

//分析邮箱正则匹配

  1. 任何一个1位和2位数字
  2. 任何一个以1 开头的3位数字
  3. 任何一个以2开头第2位数字在0和4之间的3位数字
  4. 任何一个以25开头,第三位数字在0到5之间的三位数字
var A = "匹配一个ip地址 : 192.168.111.110";
A = A.match(/(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))/g)
console.log(A)

第七节 回塑引用

//TODO


第八节 前后查找 (零宽断言 ?=,?<=,?!,?<!)

8.1    (?=exp):零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。
var  A = "product_path.scanproductpath";
A = A.match(/(product)(?=_path)/g);
console.log(A);
8.2     (?<=exp):零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
var A = "'name:wangfei'.scannamewangfei"
A = A.match(/(?<=name:)(wangfei)/g)
console.log(A);
8.3    (?!exp):零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。
var A ="'product_path'.scanproduct_ath'.scan";
A.match(/(product)(?!_path)/g);
console.log(A);
8.4      (?<!exp):零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp
var A = "'name:angelica'.scannnnmm angelica";
A.match(/(?<!name)(angelica)/g);
console.log(A);

博客园正则表达式零宽断言详解(?=,?<=,?!,?<!)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值