正则表达式
*正则表达式的作用(用处)
(1)测试字符串的某个模式。 test( )
(2)根据模式匹配从字符串提取一个子字符串。 Exec( )
(3)替换文本。 String .replace( )
可以看做一种特定功能的小型编程语言:在大的字符串表达式中定位一个子字符串。正则表达式是一种专门用于字符串处理的语言.
所有语言都支持正则表达式
1.创建正则表达式
var re = new RegExp("abc");//RegExp是一个对象,和Array一样
alert(re.test("absdafdsc"));//test()方法用于匹配字符串,有的话就返回true。
语法如下:
Var re= new RegExp("模式字符串","标志"); // var re=new RegExp("Abc","i"); 也可以写成这样:
Var re=/abc/i;
第一个参数是一个字符串,指定正则表达式的模式,或者其他正则表达式。
第二个参数是一个可选的字符串,包含属性“g”“i”“m”,分别用于指定全局匹配、不区分大小写、和多行匹配。
2.正则表达式的属性和方法
(1)正则表达式对象的方法
A.test 返回一个boolean值,他指出在查找的字符串中是否存在模式。
B.exec 用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
var osVersion = "Ubuntu 8";
var re = /^([a-z]+)\s+(\d+)$/i;//()分组
Var a=re.exec(osVersion);
alert(a[0]);//整个正则表达式匹配的字符串 Ubuntu 8
alert(a[1]);//第一个括号的分组 Ubuntu
alert(a[2]);//第二个括号的分组 8
C.compile 把正则表达式编译为内部格式,从而执行的更快。
(2)正则表达式对象的属性
A.source 返回正则表达式的文本的复本。只读
B.lastIndex 返回字符位置,他是被查找字符串中下一次成功匹配的开始位置。
C.$1...$9 返回九个在模式匹配期间找到的、最近保存的部分。只读
D.input($_) 返回执行规范表述查找的字符串。只读
E.lastMatch($&) 返回任何正则表达式搜索过程中的最后匹配的字符。只读
F.lastParen($+) 如果有的话,返回任何正则表达式查找过程中最后括的子匹配。只读
G.leftContext($^) 返回被查找的字符串中冲字符串开始位置到最后匹配之前的位置之间的字符。只读
H.rightContext($') 返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。
只读
(3)string对象一些和正则表达式相关的方法
A.match 找到一个或多个正则表达式的匹配
B.replace 替换与正则表达式匹配的子串
替换文本小实例
var s = "---abc123---";
alert(s.replace(/-/g,"#")); //将字符串中的每个‘-’替换成‘#’,‘g’是全文查找 ###abc123###
Alert(s.replace(/- +/g,"#"));//将字符串中连续的‘-’替换成单个的‘#’ #abc123# 去掉字符串两端的空白
s = " a b c ";
function trim(s) {
s = s.replace(/^\s+/, "");
s = s.replace(/\s+$/, "");
return s;
}
alert("|" + trim(s) + "|");
C.search 检索与正则表达式相匹配的值。
返回的是检索到的内容的位置
D.split 把字符串分隔成字符串数组 分隔字符split( )
s = prompt("请输入你的出生日期(例如1990-9-25)", "");
var date = s.split(/[^0-9]+/);//^在中括号里面表示非数字,排除数字
var year = date[0],
month = date[1],
day = date[2];
alert(year + ":"+month + ":"+day);
3.转义字符
正则表达式的元字符
(分组 [ 范围{ \转义 ^开始位置 $结束位置 |或 ?出现0次或1次 *出现0次以上 + 出现1次以上 .任意字符(除\n)
匹配他们本身的时候在前面加上一个反斜杠就ok了
(1)Var re=/\s/; \s(转义字符)匹配任何空白字符,包括空格、制表符、换页符等等。
(2)var re=/[a-zA-Z0-9]/;匹配字母(不区分大小写)和数字。也可以这样写var re=/[a-z][0-9]/
也可以这样,re=/\w\d/ \w表示字母 ,\d表示数字
(3)var re=/^[a-z]+\s+\d+$/i ;//+表示字符至和空格少要出现1次
(4)var re=/\w*/; //*表示出现0次或者多次
(5)^ 表示字符串的开始位置,$表示字符串的结束位置
“^”:脱字符(^)代表字符开始位置。如:var re=new RegExp("^he"); alert(re.test("hello"));
结果返回true
(6) . (小数点)在正则表达式中小数点表示任意字符(除换行符外)+ #- *...可以这样用来转义表示小数点 \.
(7)\d匹配一个数字
\D匹配非数字字符
\s匹配一个空白字符
\S匹配一个非空字符
\w匹配一个字母和下划线
\W匹配非字符和下划线
(8)量词(*、+、?、{n}、{n,}、{n,m})
{n}:n为非负整数,匹配确定的n次。如:re=/\d{4}/;alert(re.test("1234"));//匹配只有四个数字的字符串。
{n,}:n为非负整数,至少匹配n次。如:re=/\d{4,}/;alert(re.test("1234"));//匹配至少有四个数字的字符串。
{n,m}:m,n为非负整数,且n<=m。最少匹配n次,最多匹配m次。如:re=/\d{4,5}/;
alert(re.test("1234"));//匹配有四位和五位数字的字符串。
(9)$1--$9
$1:表示第一个分组
Var re=/(\d+)-(\d+)/
S= "23-45"
Alert(s.replace(re,"$2-$1"))//这样就可以交换第一个分组和第二个分组的位置
4.分组嵌套
规则:从外往内
Var re=/(A?(B?(C?)))/ ; re.exec("ABC");依次产生的三个分组为:
(A?(B?(C?))) ABC
(B?(C?)) BC
(C?) C