代码改变世界

js正则表达式

2017-03-04 11:16  老安的世界  阅读(152)  评论(0编辑  收藏  举报

定义正则表达式

//定义
var pattern=new RegExp('box','gi');
var pattern=/[0-9]/gi;

字符串测试方法

test:匹配结果返回true,false

exec:匹配结果放回匹配的字符串

var pattern=/[0-9]/gi;

str="there are 34 box";
var res1=pattern.test(str);//true
//exec匹配到返回数组,匹配不到返回null
var res2=pattern.exec(str);//3

字符串的正则方法

/*
字符串的正则方法
match  返回匹配的数组或null
replace  替换
serach   返回开始的位置
split 拆分字符串为数组
*/
var pattern=/box/gi;

str="is box 1 - Box 2";
//var res=str.match(pattern);//box,Box
//var res=str.replace(pattern,'desk');//desk 1 - desk 2
//var res=str.search(pattern);//3
var res=str.split(pattern);//以box作为拆分原则,返回is , 1 - , 2

正则表达式的静态属性

/*静态属性,用处不大*/
var pattern=new RegExp('baidu');
var str="this is baidu !!!";
pattern.test(str);//必须执行一次,静态属性才有效

document.write(RegExp.input);//this is baidu !!!
document.write(RegExp.leftContext);//前子串 this is
document.write(RegExp.rightContext);//后子串 !!!

获取控制

/*获取控制*/
var pattern=/^baidu[0-9]$/gi;
var str="baidu8";
/*
[0-9]  \d
[^0-9]  \D
\w  //字母数组及下划线
\W  //非字母数字及下划线
+  1个或多个
?  0个或1个
*  任意个
{m,n} 最少m个,最多n个
{m,} m个或以上
{m}  只能m个   [a-z]{3}
^  行首匹配
$  行尾匹配   /^baidu$/完全匹配str="baidu"
*/
/*获取控制*/
var pattern=/8(.*)8/gi;
var str="8 is baidu8";
/*
\s  空格
\b  是否到达边界
|   或//   /baidu|google|bing/
RegExp.$1  获取第一个分组的内容
*/
//分组匹配
pattern.test(str);
alert(RegExp.$1);   //is baidu

 分组内容的替换

/*获取控制*/
var pattern=/(.*)\s(.*)/gi;
var str="baidu google";

document.write(str.replace(pattern,'<strong>$1</strong>'));
document.write(str.replace(pattern,'<strong>$2,$1</strong>'));//google,baidu
//捕获性分组,所有分组都捕获
var pattern=/(d+)([a-z])/gi;
//非捕获分组(不捕获第二个分组) ?:
var pattern=/(d+)(?:[a-z])/gi;
//前瞻性捕获(goo后面必须为gle) ?=
var pattern=/goo(?=gle)/gi;
var str="google";
//嵌套分组
var str="abc";
var str=/(a?(b?(c?)))/;
a[0]  整个字符串 abc
a[1]  第一个分组,abc
a[2]  第二个分组 bc
a[3]  第三个分组 c