JavaScript初学 ---- RegExp

什么是 RegExp?

正则表达式描述了字符的模式对象。
当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。
简单的模式可以是一个单独的字符。
更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。
您可以规定字符串中的检索位置,以及要检索的字符类型,等等。
语法

var patt=new RegExp(pattern,modifiers);

或更简单的方法

var patt=/pattern/modifiers;

修饰符(modifiers)描述了检索是否是全局,区分大小写等。
修饰符,就三个,可以没有

i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

var rg = /[abc]/i;  //这一行实际上是无效的
var rg = new RegExp('[abc]','ig')
console.log(rg.global);//true 是否设置全局标识
console.log(rg.ignoreCase);//true 是否区分大小写
console.log(rg.multiline);//false 是否设置多行标识

console.log(rg.lastIndex);0  //表示开始搜索下一个匹配项的字符位置,从0算起
console.log(rg.source); //[abc] 返回按照字面量形式而非传入构造函数中的字符串模式

test 方法返回Boolean,是否符合匹配

var rg = new RegExp('[1-5]');//查找是否含有1-5,除了数字,还可以是字母([a-z] , [A-y])
console.log(rg.test('468'))//true
console.log(rg.test('987'))//false

var rg = new RegExp('[^abc]')//如果不包含其中任意一个字符,返回true
console.log(rg.test('abc'))//false
console.log(rg.test('defg'))//true

var rg = new RegExp('[abc]')//是否包含其中任意一个字符
console.log(rg.test('aaaaaa'))//true
console.log(rg.test('sho'))//false

var rg = new RegExp('(good|bed|ok)')//是否包含 | 隔开的匹配项
console.log(rg.test('this is good'))//true
console.log(rg.test('this is OK'))//false

//**量词 **
/*
n+  匹配任何包含至少一个 n 的字符串。
n*  匹配任何包含零个或多个 n 的字符串。
n?  匹配任何包含零个或一个 n 的字符串。
*/

var rg = new RegExp('(good)+')//>=1个
console.log(rg.test('gooddoogood'))//true
console.log(rg.test('goo'))//false

var rg = new RegExp('(good)*man')//>=0
console.log(rg.test('goodgoodman'))//true
console.log(rg.test('no good'))//false

var rg = new RegExp('(good)?')//匹配任何包含零个或一个  的字符串。
console.log(rg.test('goodman'))//true
console.log(rg.test('goodgood'))//false

exec 方法
检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null.

返回的数组是Array实例,但包含两个额外的属性: index 和 input。

其中,

index 表示匹配项在字符串中的位置。(上面代码匹配项为 short ,对应的位置 是16);

input 表示应用正则表达式的字符串。(上面代码的 text变量的值 this has been a short summer);

在数组中,

第一项:表示与整个模式匹配的字符串 (上面代码中的 short 匹配 正则校验);

其它项: 与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)

var rg = new RegExp('(good|bed|ok|is)')//是否包含 | 隔开的匹配项
//var rg = new RegExp('is')
console.log(rg.exec('this is good'))//[ 'is', 'is', index: 2, input: 'this is good' ]
console.log(rg.exec('this is OK'))//[ 'is', 'is', index: 2, input: 'this is OK' ]
var restr = rg.exec('no one can good')
console.log(typeof restr)//object
//用一个变量存一下返回值
var rerg = rg.exec('you are a good women');
console.log(rerg.index)//10
console.log(rerg.input)//you are a good women
console.log(rerg[0])//good
console.log(rerg[1])//good
console.log(rerg[2])//undefined
量词

n+
匹配任何包含至少一个 n 的字符串。

例如,/a+/ 匹配 “candy” 中的 “a”,”caaaaaaandy” 中所有的 “a”。

n*
匹配任何包含零个或多个 n 的字符串。

例如,/bo*/ 匹配 “A ghost booooed” 中的 “boooo”,”A bird warbled” 中的 “b”,但是不匹配 “A goat grunted”。

n?
匹配任何包含零个或一个 n 的字符串。

例如,/e?le?/ 匹配 “angel” 中的 “el”,”angle” 中的 “le”。

n{X}
匹配包含 X 个 n 的序列的字符串。

例如,/a{2}/ 不匹配 “candy,” 中的 “a”,但是匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。

n{X,}
X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。

例如,/a{2,}/ 不匹配 “candy” 中的 “a”,但是匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a”。

n{X,Y}
X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。

例如,/a{1,3}/ 不匹配 “cndy”,匹配 “candy,” 中的 “a”,”caandy,” 中的两个 “a”,匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。

n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n 的字符串。
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。

元字符

. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配单词边界。
\B 匹配非单词边界。
\0 查找 NULL 字符。
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

字符串支持正则的其他方法

split()
根据传入字符串进行分割

var str = 'it-is-just-test';
var strs = str.split('-')
console.log(strs)//[ 'it', 'is', 'just', 'test' ]

replace()
顾名思义,替换啦

var str = 'i am a good man'
//console.log(/^(i)/.test(str))
var str2 = str.replace(/^(i)/,'he')
console.log(str2)//her am a good man

match()
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配

var str="The rain in SPAIN stays mainly in the plain"; 
var strs=str.match(/ain/g);
console.log(strs)//[ 'ain', 'ain', 'ain' ]

search()
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

var str = 'i\'m gonna burn my house down into an ugly black'
console.log(str.search('house'))//18
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值