1、了解正则表达式的方法
RegExp对象表示正则表达式,是对字符串执行模式匹配的工具
正则表达式的基本语法如下2种:
(1)、直接量语法
/pattern/attributes;
(2)、创建RegExp对象的语法
new RegExp(pattern,attributes);
参数:参数pattern是一个字符串,指定了正则表达式的模式,参数attribute是一个可选参数,包含属性g,i,m,分别是全局匹配,不区分大小写匹配,多行匹配
2、支持正则表达式的String对象的方法
(1)search()方法;该方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的字符串
基本语法:stringObject.search(regexp);
返回值:stringObject中第一个与regexp对象相匹配的子串的起始位置,如果没有找到任何匹配的子串,则返回-1
(2)match()方法;用于在字符串内检索指定的值,或找到一个或者多个正则表达式的匹配。
基本语法:stringObject.match(searchValue)或者stringObject.match(regexp)
返回值:存放匹配成功的数组,全局匹配的话,它返回的是一个数组。如果没有找到任何的一个匹配,那么它将返回的是null;返回的数组内有三个元素,第一个元素的存放的是匹配的文本,还有二个对象属性;index属性表明的是匹配文本的起始字符在stringObject中的位置;input属性声明的是对stringObject对象的引用;
测试代码:
var str = "hello world";
console.log(str.match("hello")); // ["hello", index: 0, input: "hello world"]
console.log(str.match("Hello")); // null
console.log(str.match(/hello/)); // ["hello", index: 0, input: "hello world"]
// 全局匹配
var str2="1 plus 2 equal 3"
console.log(str2.match(/\d+/g)); //["1", "2", "3"]
(3)replace()方法:用于在字符串中使用一些字符替换另一些字符,或替换一个与正则表达式匹配的子字符串
基本语法:stringObject.replace(regexp/substr,replacement);
参数:
regexp/substr;字符串或者需要替换模式的RegExp对象
replacement:一个字符串的值,被替换的文本或者生成替换文本的函数
返回值:返回替换后的新字符串
replacement中的$有具体的含义,如下:
1,2,3....99含义:与regexp中的第1到第99个子表达式相匹配的文本
$&的含义是:与RegExp相匹配的子字符串
lastMatch或RegExp["$_"]的含义是:返回任何正则表达式搜索过程中的最后匹配的字符。
lastParen或 RegExp["$+"]的含义是:返回任何正则表达式查找过程中最后括号的子匹配。
leftContext或RegExp["$`"]的含义是:返回被查找的字符串从字符串开始的位置到最后匹配之前的位置之间的字符。
rightContext或RegExp["$'"]的含义是:返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。
(4)split()方法:把一个字符串分割成字符串数组语法:stringObject.split(separator,howmany);
参数
(1)、separator【必填】,字符串或正则表达式,该参数指定的地方分割stringObject
(2)、howmany【可选】,该参数指定返回的数组的最大长度,
3、RegExp对象方法
(1)test()方法:该方法用于检测一个字符串是否匹配某个模式
基本语法:RegExpObject.test(str);
@param(参数) str是需要检测的字符串;
@return (返回值) 如果字符串str中含有与RegExpObject匹配的文本的话,返回true,否则返回false;
(2)exec()方法:该方法用于检索字符串中的正则表达式的匹配
基本语法:RegExpObject.exec(string)
@param(参数):string【必填项】要检索的字符串
@return(返回值):返回一个数组,存放匹配的结果,如果未找到匹配,则返回值为null
注意:该返回的数组的第一个元素是与正则表达式相匹配的文本,该方法还返回2个属性,index属性声明的是匹配文本的第一个字符的位置;input属性则存放的是被检索的字符串string;该方法如果不是全局的话,返回的数组与match()方法返回的数组是相同的。
var str = "longen and yunxi";
console.log(/longen/.exec(str));
// 打印 ["longen", index: 0, input: "longen and yunxi"]
// 假如没有找到的话,则返回null
console.log(/wo/.exec(str)); // null
4、了解正则中的普通字符
字母、数字、汉字,下划线及一些没有特殊定义的标点符号,都属于普通字符。正则中的普通字符,在匹配字符串的时候,匹配与之相同的字符即可。例如
var str = "abcde";
console.log(str.match(/a/)); // ["a", index: 0, input: "abcde"]
5、了解正则中的方括号[]的含义
方括号包含一系列字符,能够匹配其中任意一个字符。如[abc]可以匹配abc任意一个字符。使用[^abc]包含的字符abc,则能够匹配abc字符之外的任何一个字符,只能是一个字符。如下的含义:
[abc]:查找在方括号中的任意一个字符;
[^abc]:查找不在方括号中的任意一个字符
[0-9]:查找0-9中的任意一个字符
[a-z]:查找从小写a到z中的任意一个字符
(red|blue|green):查找小括号中的任意一项,小括号中的|是或者的意思。
元字符 | 描述 |
. | 查找任意的单个字符,除换行符外 |
\w | 任意一个字母或数字或下划线,A_Za_z0_9,_中任意一个 |
\W | 查找非单词的字符,等价于[^A_Za_z0_9_] |
\d | 匹配一个数字字符,等价于[0-9] |
\D | 匹配一个非数字字符,等价于[^0-9] |
\s | 匹配任何空白字符,包括空格,制表符,换行符等等。等价于[\f\n\r\t\v] |
\S | 匹配任何非空白字符,等价于[^\f\n\r\t\v] |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。比如’er\b’可以匹配”never”中的”er”,但是不能匹配”verb”中的”er” |
\B | 匹配非单词边界,'er\B'能匹配'verb'中的'er',但不能匹配'nerver'中的'er' |
\0 | 查找NULL字符 |
\n | 匹配一个换行符 |
\f | 匹配一个换页符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
\xxx | 查找一个以八进制数xxx规定的字符 |
\xdd | 查找以16进制dd规定的字符 |
\uxxxx | 查找以16进制数的xxx规定的Unicode字符 |
6、RegExp特殊字符中的需要转义字符
匹配输入字符串的结尾位置,如果需要匹配 本身的话,使用$
^ 匹配输入字符串的开始位置,匹配^本身的话,使用\^
* 匹配前面的子表达式的零次或者多次,匹配*本身的话,使用\*
+ 匹配子表达式的1次或者多次,匹配+本身的话,使用\+
. 匹配除换行符之外的任何一个字符,匹配.本身的话,使用\.
[ 匹配一个中括号开始,匹配本身的,使用\[
? 匹配前面的子表达式的零次或者1次,或指明一个非贪婪限定符,要匹配本身的话,使用\?
\ 匹配本身的话,请使用\\
{ 标记限定符开始的地方,要匹配{ ,请使用\{
| 指明多项中的一个选择,可以理解含义为或的意思,匹配本身的话,使用\|
7、了解量词
量词 | 描述 |
n+ | 匹配任何至少包含一个n的字符串 |
n* | 匹配零个或者多个n的字符串 |
n? | 匹配零个或者1个n的字符串 |
n{x} | 匹配包含x个n的序列字符串 |
n{x,y} | 匹配至少x个,最多y个n的字符串 |
n{x,} | 匹配至少x个的字符串 |
n$ | 匹配以n结尾的字符串 |
^n | 匹配以n开头的字符串 |
?=n | 匹配其后紧接指定的n字符串 |
?!n | 匹配其后没有紧接指定的n字符串 |
==========================
正则表达式实践【常用】
1、电话号码正则
分析;电话号码有区号(3-4位数字),区号之后使用“-”与电话号码连接
分号正则:^\d{3,4}
电话号码7~8位正则,分机号3-4位数字,非必填项目。如果要填写的话。则以“-”与电话号码相连接,正则(-\d{3,4})?
因此正则匹配电话号码正则为:
/^\d{3,4}-\d{7,8}(-\d{3,4}?$)/;
2、手机号码正则
手机号码需要匹配;手机号码开头不以0开始的,并且是11位数字,目前的手机号码有如下开头的:13,14,15,17,18开头的;因此正则如下:
/(^1[3|4|5|7|8][0-9]{9}$)/