原文地址
正则:regular expression的缩写
一个正则表达式通常由以下部分组成:
◇ 一个用于匹配的模式文本。
◇ 用0个或多个修饰符(也叫做标志)描述的匹配模式细节
正则表达式 的基本语法有以下两种:
-
直接量语法:
/pattern/attributes;
2.创建RegExp对象的语法:
new RegExp(pattern,attributes);
参数:参数pattern是一个字符串,指定了正则表达式的模式;参数attributes是一个可选参数,包含属性g,i,m。分别表示全局匹配,不区分大小写,多行匹配。
支持正则表达式的String对象方法
-
search()方法
用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的字符串。
基本语法:stringObject.search(regexp);
参数:regexp可以是需要在stringObject中检测的字符串,也可以是需要检索的RegExp对象
返回值:stringObject中第一个与RegExp对象相匹配的子串的起始位置。如果未找到则返回-1
注意:search()方法不执行全局匹配,它会忽略标志g,同时它也没有RegExp对象的lastIndex属性,且总是从字符串起始位置开始查找,总是返回的是stringObject匹配的第一个位置
var strSearch = "hello world,hello world";
//返回匹配到的第一个位置(使用RegExp对象检索)
console.log(strSearch.search(/hello/)); //0
//没有全局概念 总是返回匹配到的第一个位置
console.log(strSearch.search(/hello/)); //0
console.log(strSearch.search(/world/));//也可以是检索字符串中的子字符串 console.log(strSearch.search('wo')); //6 //如果没有检索到则返回-1 console.log(strSearch.search('asd')); //-1 console.log(strSearch.search(/asd/)); //-1 //可以设置在检索的时候忽略大小写 console.log(strSearch.search(/Wo/i)); //6
-
match()方法
用于在字符串内检索到指定的值,或找到一个或者多个正则表达式的匹配。该方法类似于indexOf()或者lastIndexOf();但是它返回的是指定的值而非字符串的位置
基本语法:stringObject.match(searchValue)或者stringObject.match(regexp)
参数 searchValue:需要检索字符串的值;RegExp:需要匹配模式的RegExp
返回值:存放匹配成功的数组;他可以全局匹配,全局匹配的话返回的是一个数组。如果没有找到任何的一个匹配,那么返回null;返回的数组内有三个元素,第一个是匹配的文本,还有两个对象属性:index属性表明的是匹配文本的初始字符下标,input属性是stringObject对象的引用
var strMatch1 = "hello world,hello world";
console.log(strMatch1.match("world")); //["world", index: 6, input: "hello world,hello world"]
console.log(strMatch1.match(/world/g)); //["world", "world"]
console.log(strMatch1.match('World')); //null
var strMatch2 = "123 aaa 3123das 9483sdkfjk";
console.log(strMatch2.match(/\d+/g)); //["123", "3123", "9483"] \d 1个及多个 -
replace()方法
用于在字符串中使用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子字符串;
** 基本语法:strObj.replace(regexp/substr,replacement)
** 参数:regexp/substr:字符串或需要替换模式的RegExp对象。。replacement:一个字符串值,被替换的文本或者生成替换文本的函数
** 返回值:返回替换后的新字符串
** 注意:字符串的stringObject的replace()方法执行的是查找和替换操作,替换的模式有2种,既可以是字符串,也可以是正则匹配模式,如果是正则匹配模式的话,那么它可以加修饰符g,代表全局替换,否则的话,它只替换第一个匹配的字符串;
var strReplace = "hello world,hello world";
//替换字符串
var s1 = strReplace.replace("hello","a");
console.log(s1); //a world,hello world
//使用正则替换字符串
var s2 = strReplace.replace(/hello/,"a");
console.log(s2); //a world,hello world
var s3 = strReplace.replace(/hello/g,"a");
console.log(s3); //a world,a world//$1,$2代表的是第一个和第二个子表达式相匹配的文本 //子表达式需要使用小括号括起来,代表的含义是分组 var $str = "hello,world"; var s4 = $str.replace(/(\w+)\s*,\s*(\w+)/,"$2,$1"); //world hello \w任意一个字母或数字或下划线,A_Za_Z0_9,_中任意一个\s匹配任何空白字符,包括空格,制表符,换行符等等。等价于[\f\n\r\t\v] console.log(s4);
-
split()
把一个字符串分割成字符串数组
** 基本语法:stringObject.split(separator,howmany);
** 参数:
separator:【必填项】,字符串或正则表达式,该参数指定分割地方
howmany[可选]:该参数指定返回的数组的length
返回值:一个字符串数组
var strSplit = "what are you doing?";
//以" "分割字符串
console.log(strSplit.split(" ")); //["what", "are", "you", "doing?"]
//以""分割
console.log(strSplit.split("")); //["w", "h", "a", "t", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", "?"]
console.log(strSplit.split("",3)); //["w", "h", "a"]
RegExp对象方法
-
test()方法
该方法用于检测一个字符串是否匹配某个模式;
基本语法:RegExpObject.test(str);
参数: str是需要检测的字符串;
返回值 :如果字符串str中含有与RegExpObject匹配的文本的话,返回true,否则返回false;
var str = "hello word";
console.log(/hello/.test(str)); //true
console.log(/world/.test(str)); //false// console.log("hello".test(str)); //这种写法是错误的
RegExp中的各种字符代表含义
- 普通字符
字母,数字,汉字,下划线及一些没有特殊定义的标点符号,都属于普通字符,正则中的普通字符,在匹配字符串的时候,匹配与之相同的字符即可~ 比如如下代码:
var str = "abcde";
console.log(str.match(/a/)); // ["a", index: 0, input: "abcde"]
如上代码,字符串abcde匹配a的时候,匹配成功,索引位置从0开始; - []
方括号包含一系列字符,能够匹配其中任意一个字符, 如[abc]可以匹配abc中任意一个字符,使用[^abc]包含的字符abc,则能够匹配abc字符之外的任何一个字符,只能是一个字符。如下的含义:
[abc]: 查找在方括号中的任意一个字符;
[^abc]: 查找不在方括号中的任意一个字符;
[0-9]: 查找0-9中的任意一个数字;
[a-z]: 查找从小写a到z中的任意一个字符;
(red|blue|green); 查找小括号中的任意一项,小括号中的 | 是或者的意思;
var str = "abcde";
console.log(str.match(/[bcd][bcd]/)); //["bc",index:1,input:"abcde"]
javascript中的元字符
|元字符 |描述 |
| :---|: ------ |
| . |查找任意单个字符,出换行符外|
| \w |任意一个字母数字下划线,A_Z,a_z,0_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’,但不能匹配’never’中的’er’|
|\0 |查找NUL字符。|
|\n |匹配一个换行符 |
|\f |匹配一个换页符 |
|\r|匹配一个回车符|
|\t|匹配一个制表符|
|\v|匹配一个垂直制表符|
|\xxx|查找一个以八进制数xxx规定的字符|
|\xdd|查找以16进制数dd规定的字符|
|\uxxxx|查找以16进制数的xxxx规定的Unicode字符。|
RegExp特殊字符中的需要转义字符
需要转义的特殊字符前面加 \
匹配输入字符串的结尾位置,如果需要匹配匹配输入字符串的结尾位置,如果需要匹配本身的话,使用$
^ 匹配输入字符串的开始位置,匹配^本身的话,使用^
* 匹配前面的子表达式的零次或者多次,匹配*本身的话,使用*
+ 匹配子表达式的1次或者多次,匹配+本身的话,使用\+
. 匹配除换行符之外的任何一个字符,匹配.本身的话,使用\.
[ 匹配一个中括号开始,匹配本身的,使用\[
? 匹配前面的子表达式的零次或者1次,或指明一个非贪婪限定符,要匹配本身的话,使用?
\ 匹配本身的话,请使用\\
{ 标记限定符开始的地方,要匹配{ ,请使用\{
| 指明多项中的一个选择,可以理解含义为或的意思,匹配本身的话,使用|
量词
|量词|描述|
| -- |: -- |
|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字符串|
正则表达式相关文章:正则表达式30分钟入门教程
正则表达式测试:测试
网友评论