一、正则表达式作用
测试字符串内的模式。
可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式或邮箱。即数据验证。替换文本。
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。从字符串中提取子字符串。
可以查找文档内或输入域内特定的文本。
二、一些术语
- 元字符:
即特殊字符,就是一些有特殊含义的字符。
例子:^匹配输入字符串的开始位置。要匹配 ^ 字符本身,请使用 \^。 - 普通字符:
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。大写和小写字母、数字、所有标点符号和其他符号。 - 非打印字符:
从字面意思来看就是不能打印的字符,在计算机程序范涛内,打印一般就是指的输出。
例子:\n 换行 \r回车 - 限定符:
用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。
三、js中正则应用
1、 两种方式:
a、 构造函数:
当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。
1、var patt=new RegExp(pattern,modifiers);
var re = new RegExp("\\w+");
b、 简单方式:
pattern : 任何简单或复杂的正则表达式。
modifiers : 标志可以有一个或多个,表明正则表达式的行为。(g i m)
i : 表示匹配字符串不区分大小写。
g : 表示在全局匹配字符串 ,不会在匹配到一次后停止。
m : 表示多行模式,在达到一行文本末尾时还会继续查找下一行。
var patt=/pattern/modifiers;
var re = /\w+/;
2、match() :
可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。类似 indexOf但它返回指定的值,而不是位置。
a、匹配字串:
var str="Hello world!"
console.log(str.match("world")) // world
console.log(str.match("World")) // null
console.log(str.match("worlld")) // null
console.log(str.match("world!")) // world!
b、匹配正则:
var str="Visit W3CSchool Visit W3CSchool Visit W3CSchool";
var patt1=/w3cschool/i;
document.write( str.match( patt1 ) ); // ["W3CSchool"]
var patt2 = /w3cschool/gi;
document.write( str.match( patt2 ) ); // ["W3CSchool", "W3CSchool", "W3CSchool"]
3、其他正则方法
a、test()方法:
test()方法搜索字符串指定的值,根据结果并返回真或假。
var str1 = "hello world I like code"
var patt3 = /e/g;
console.log( patt3.test(str1) ); // true
var patt31 = new RegExp( 'e' );
console.log( patt31 .test(str1) ); // true
b、exec()方法:
方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
var str4 = " hello World everyone";
var patt4 = /wor/gi;
console.log( patt4.exec( str4 ) ); // ["Wor"]
c、search()方法
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。
如果没有找到任何匹配的子串,则返回 -1。
// 查找换行符\n
var str = "hat hot my telephone is 12202345672 10 email: liulfjs@126.com \n liuyongshun this his at"
var patt01 = /\n/g;
console.log( str.match( patt01 ) ); // \n
console.log( str.search( patt01 ) ); //63
四、一些规则和例子
var str = "hat hot my telephone is 12202345672 10 email: liulfjs@126.com \n liuyongshun this his at"
// search 括号内任意字符,为设置g时,找到ema中的任何一个都会停止。[a-z]
var patt = /[ema]/;
console.log( str.match( patt ) );
// 查找除了括号内所有的字符。[^]
var patt1 = /[^ema]/g;
console.log( str.match( patt1 ) );
// 查找任何从 0 至 3 的数字。[0-5]
var patt2 = /[0-3]/g;
console.log( str.match( patt2 ) );
// 查找任何指定的选项。(em|liu|shun)
var patt3 = /(ema|is|liu)/g;
console.log( str.match( patt3 ) );
// 查找单个字符,除了换行和行结束符。 h.t
var patt4 = /h.t/g;
console.log( str.match( patt4 ) );
// 查找单词字符。 \w(小写)
var patt5 = /\w/g;
console.log( str.match( patt5 ) );
// 查找非单词字符。\W(大写)
var patt6 = /\W/g;
console.log( str.match( patt6 ) );
// 查找数字\d(小写,大写是查找非数字)
var patt7 = /\d/g;
console.log( str.match( patt7 ) );
var patt8 = /\D/g;
console.log( str.match( patt8 ) );
// 查找空白字符,包括回车
var patt9 = /\s/g;
console.log( str.match( patt9 ) );
var patt00 = /\S/g;
console.log( str.match( patt00 ) );
// 查找换行符\n
var patt01 = /\n/g;
console.log( str.match( patt01 ) );
console.log( str.search( patt01 ) ); //++++++++++++++++++
// 匹配任何包含至少一个h的字符串 h+
var patt02 = /h+/g;
console.log( str.match( patt02 ) );
var patt03 = /\w+/g; //\w指匹配单词字符。
console.log( str.match( patt03 ) )
// 匹配任何结尾(整个字符串结尾)为t的字符。t$
var patt04 = /t$/g;
console.log( str.match( patt04 ) );
// 匹配任何开始(整个字符串结尾)为h的字符。^h
var patt05 = /^h/g;
console.log( str.match( patt05 ) );
// 匹配包含 X 个 n 的序列的字符串 n{X}
// n{X,Y}匹配包含 X 或 Y 个 n 的序列的字符串。(筛选千和万和十万和百万)
// n{X,} 匹配包含至少 X 个 n 的序列的字符串。
var patt06 = /\d{11}/g;
console.log( str.match( patt06 ) );
// n? 匹配任何包含零个或一个 n 的字符串。
var patt07 = /10?/g; //这里指的零个或一个0。
console.log( str.match( patt07 ) );
// ?=n 匹配任何其后紧接指定字符串 n 的字符串。
var patt08 = /one(?= is)/g;
console.log( str.match( patt08 ) );
// ?!n 匹配其后没有紧接指定字符串 n 的任何字符串。
var patt09 = /is(?! at)/g;
console.log( str.match( patt09 ) );
console.log( patt09.exec( str ) ); //++++++++++++++++++++
console.log( patt09.test( str ) ); //++++++++++++++++++++
var str2 = "Mr Blue has a blue house and a blue car";
var n = str2.replace(/blue/gi,"red"); //+++++++++++++++++
console.log( n );
一些写好的正则 在线正则
一个例子:
<form action="">
<input type="text" id="text" value="请输入内容" onfocus="if(this.value == '请输入内容'){this.value = ''}" onblur="if(this.value == ''){this.value = '请输入内容'}">
<div id="judges">judgeFormContent</div>
</form>
var c = document.getElementById( 'judges' );
var d = document.getElementById( 'text' );
c.addEventListener( 'click', function() {
var string = d.value;
var patts = /\@/g;
var check = string.match( patts );
console.log( check );
if ( !check ) {
alert( '格式错误' );
} else {
alert( '这是邮箱' )
}
} )