正则表达式炼级攻略
曾记得几年前刚接触到 整个攻略分为4个部分,基础部分包含了一般程序员会用到的百分之80的功能,接下来是只有少数的程序员能在日常工程运用到高级部分的技巧,其次介绍了只有极少数人能够真正掌握正则的超能力(反正我还没有)。最后会讲在js里面运用正则的一些实践。为了方便操作示例主要使用 存活下来
更快、更好、更强
var str = '<h1>hi label</h1> <h2>h2 label</h2> <h2>h2 error label</h3>';
str.match(/<[hH][1-9]>.*?</[hH][1-9]>/g)
[ '<h1>hi label</h1>',
'<h2>h2 label</h2>',
'<h2>h2 error label</h3>' ]
很明显第三个结果是一个错误的标签,回溯引用就是为了解决这个问题。 var str = '<h1>hi label</h1> <h2>h2 label</h2> <h2>h2 error label</h3>';
str.match(/<[hH]([1-9])>.*?</[hH]1>/g)
[ '<h1>hi label</h1>','<h2>h2 label</h2>' ]
正则超能力前后查找
//文本
Hello my name is LeBron!
http://www.baidu.com
https://www.sina.com.cn
ftp://192.168.0.1
//reg
grep -P '.+(?=:)' ./x.js
//output
`http`://www.baidu.com
`https`://www.sina.com.cn
`ftp`://192.168.0.1
嵌入条件
var str = '<a href="/home"><img src="/images/home.gif"></a> <img src="/images/aboutme.gif">';
str.match(/(<[aA]%s+[^>]+)?<[iI][mM][gG]s+[^>]+>(?(1)s*</[Aa]>)/);
Javascript与正则的结合 1.exec(RegEx)
Demo: var reg = /ab[cx]/g;
var str = 'abcdefabx';
var myArr;
while((myArr = reg.exec(str)) !== null) {
var msg = 'Found ' + myArr[0] + '.';
msg += 'Next match starts at ' + reg.lastIndex;
console.log(msg);
console.log('myArr:',myArr);
console.log('reg:',reg);
console.log('----------------------');
}
output: [luncher@localhost regex]$ node x.js
Found abc.Next match starts at 3
myArr: [ 'abc',index: 0,input: 'abcdefabx' ]
reg: /ab[cx]/g
---------------------- Found abx.Next match starts at 9 myArr: [ 'abx',index: 6,input: 'abcdefabx' ] reg: /ab[cx]/g ----------------------
启用分组捕获 var reg = /(ab)[cx]/g;
var str = 'abcdefabx';
var myArr;
while((myArr = reg.exec(str)) !== null) {
var msg = 'Found ' + myArr[0] + '.';
msg += 'Next match starts at ' + reg.lastIndex;
console.log(msg);
console.log('myArr:',reg);
console.log('----------------------');
}
output [luncher@localhost regex]$ node x.js
Found abc.Next match starts at 3
myArr: [ 'abc','ab',input: 'abcdefabx' ]
reg: /(ab)[cx]/g
----------------------
Found abx.Next match starts at 9
myArr: [ 'abx',input: 'abcdefabx' ]
reg: /(ab)[cx]/g
----------------------
2.test(RegEx)
Demo > /https?/.test('https');
true
> /https?/.test('http');
true
> /https?/.test('ftp');
false
3.match(String)
Demo > var str = 'hi my name is leBron James or KingLeBron';
> str.match(/[lL]eBrons?/);
[ 'leBron ',index: 14,input: 'hi my name is leBron James or KingLeBron' ]
> str.match(/[lL]eBrons?/g);
[ 'leBron ','LeBron' ]
4.search(String)
Demo [luncher@localhost regex]$ node
> var str = 'ni hao';
> str.search(/[ii]/);
1
> str.search(/[xX]/);
-1
5.split(String)
Demo > var str = '{k1: 1,k2: 2,k3: 3}';
> str.split(/[{}]/);
[ '','k1: 1,k3: 3','' ]
> str.split(/[{}]/)[1].split(/,/);
[ 'k1: 1',' k2: 2',' k3: 3' ]
>
6.replace(String)
Demo1 > var str ='leBron James';
> str.replace(/(w+)s(w+)/,"$2,$1");
'James,leBron'
>
Demo2 > var str ='leBron James';
> str.replace(/(w+)s(w+)/,function(match,p1,p2,offset,string) {
... return p1.toUpperCase()+p2.toUpperCase();});
'LEBRONJAMES'
参考文献: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |