////////////////////////////////////////////////////////////////////////////////////////////////////////
slice 获取子字符串
substring 获取子字符串
substr 获取子字符串
charAt 获取某个字符
split 分割字符串,获得数组
search 查找
replace 替换
////////////////////////////////////////////////////////////////////////////////////////////////////////
正则表达式是被用来匹配字符串中的字符组合的模式。
在JavaScript中,正则表达式也是对象。
这种模式可以被用于 RegExp 的 exec() 和 test() 方法以及 String 的 match()、replace()、search() 和 split() 方法。
////////////////////////////////////////////////////////////////////////////////////////////////////////
你可以通过下面两种方法创建一个正则表达式:
使用一个正则表达式字面量,如下所示:var re = /abc/;正则表达式字面量在脚本加载后编译。若你的正则表达式是常量,使用这种方式可以获得更好的性能。
调用RegExp对象的构造函数,如下所示:var re = new RegExp(“abc”);(new操作符我们《JavaScript高级》课程详细介绍,这里记住即可)
////////////////////////////////////////////////////////////////////////////////////////////////////////
根据匹配字符串切割父字符串
eg: 根据空格切割字符串:‘aa bbb c dd eeeeee’
‘aa bbb c dd eeeeee’.split(/\s+/)
=> [“aa”, “bbb”, “c”, “dd”, “eeeeee”]
练习:根据字母a切割字符串’bbaacaaaadddaeeeeeaaf’
////////////////////////////////////////////////////////////////////////////////////////////////////////
寻找匹配字符串在父字符串中位置
eg:在‘abcdefg’中寻找‘cd’位置
‘abcdefg’.search(/cd/)
=> 2
练习:在字符串’aaaa o o bbb aaa’中寻找‘o o’位置
var str="aaaa o o bbb aaa"
var str1= str.search(/o/)
var str2= str.indexOf("o")
console.log(str1)//5
console.log(str2)//5
////////////////////////////////////////////////////////////////////////////////////////////////////////
在 ‘abbcccbbbbbddbbbdabbb’ 中查询重复 ‘b’ 字符串
‘abbcccbbbbbddbbbdabbb’.match(/b+/g)
=> [“bb”, “bbbbb”, “bbb”, “bbb”]
练习:'aaaa o o bbb o o aaa’找寻所有‘o o’字符串
var str="aaaa o o bbb o o aaa"
var str2="bbaabbccbbdddbbbbeebbw"
var str1= str.match(/o/)
var str22=str2.match("bb")
var str222=str2.match(/b+/g)
console.log(str1)
// ["o", index: 5, input: "aaaa o o bbb o o aaa", groups: undefined]
console.log(str22)//["bb", index: 0, input: "bbaabbccbbdddbbbbeebbw", groups: undefined]
console.log(str222)//["bb", "bb", "bb", "bbbb", "bb"]
//类数组:它是融合了数组和对象的一个对象,他可以使用数组的方法,有数组的属性,他也可以使用对象的方法,有对象的属性。
//正则表达式中,是一个严格模式,一定注意,不要乱添加空格。
////////////////////////////////////////////////////////////////////////////////////////////////////////
替换父字符串中匹配字符串
eg:将’www.iqianduan.com’替换成’www.icketang.com’
‘www.iqianduan.com’.replace(/iqianduan/, ‘icketang’)
=> “www.icketang.com”
练习:过滤字符串中空格:'aa b c d e f ’ => “aabcdef”
var str="aa b c d e f "
var str1=str.replace(/\s+/g,'')
console.log(str1)
////////////////////////////////////////////////////////////////////////////////////////////////////////
在字符串中寻找匹配字符串,该方法比其他正则方法或字符串方法支持的更复杂
eg:在’aaaabccccbacabc’中查找’abc’字符串
var result = /abc/.exec(‘aaaabccccbacabc’)
result => [“abc”]
result.index => 3
练习:在’ooooo 0 0 ooooooooooo’字符串中匹配[“o 0 0 o”]
var str="ooooo 0 0 ooooooooooo"
var str1=/o 0 0 o/.exec(str)
console.log(str1)
////////////////////////////////////////////////////////////////////////////////////////////////////////
检测字符串是否匹配正则表达式
eg:判断’aaddccddabcddeeddfff’是否包含’abc’字符串
/abc/.test(‘aaddccddabcddeeddfff’)
=> true
练习:检测’a bc’和’abc’是否包含空格
var str="a bc"
var a=/\s/
console.log(a.test(str))
var demo=prompt("不能输入空格")
alert(!(a.test(demo)));
////////////////////////////////////////////////////////////////////////////////////////////////////////
正则表达式:
由一些普通字符和一些特殊字符(又叫元字符–metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义
特殊字符:
javascript中常用特殊字符有
( ) [ ] { } \ ^ $ | ? * + .
若想匹配这类字符必须用转移符号 \ 如:(,^,\
\t /\t/ 制表符 eg: console.log(/\t/.test(’ '))
\n /\n 回车符 eg: console.log(/\n/.test(“aaa
bbb”));
\f /\f/ 换页符
\b /\b/ 与回退字符
^ 开头 注意不能紧跟于左中括号的后面
/^hello/.test(‘hello icketang’) => true
/^icketang/.test(‘hello icketang’) => false
$ 结尾
/icketang / . t e s t ( ′ h e l l o i c k e t a n g ′ ) = > t r u e / h e l l o /.test('hello icketang') => true /hello /.test(′helloicketang′)=>true/hello/.test(‘hello icketang’) => false
\b 单词边界 指[a-zA-Z_0-9]之外的字符
‘hello icketang’.match(/\b\w+\b/g) => [“hello”, “icketang”]
\B 非单词边界
. [^\n\r] 除了换行和回车之外的任意字符
/^.+KaTeX parse error: Expected 'EOF', got '#' at position 11: /.test('a@#̲12') => true \…/.test(‘125’) => true
\D [^0-9] 非数字字符
/^\D+KaTeX parse error: Undefined control sequence: \s at position 26: …5') => false \̲s̲ ̲[ \t\n\x0B\f\r]…/.test(’ ') => true
\S [^ \t\n\x0B\f\r] 非空白字符
/^\S+KaTeX parse error: Double superscript at position 12: /.test(' '̲) => true \w …/.test(‘abCD’) => true
\W [^a-zA-Z_0-9] 非单词字符
/^\W+$/.test(‘abCD’) => true
?
软性量词 出现零次或一次
/ab?c/.test(‘abc’) => true /ab?c/.test(‘ac’) => true
*
软性量词 出现零次或多次(任意次)
/abc/.test(‘abbc’) => true /abc/.test(‘ac’) => true
+
软性量词 出现一次或多次(至道一次)
/ab+c/.test(‘abbc’) => true /ab+c/.test(‘ac’) => false
{n}
硬性量词 对应零次或者n次
/ab{3}c/.test(‘abbbc’) => true /ab{3}c/.test(‘abbc’) => false
{n,m}
软性量词 至少出现n次但不超过m次(中间不能有空格)
/ab{3,5}c/.test(‘abbbbbc’) => true /ab{3,5}c/.test(‘abc’) => false
{n,}
软性量词 至少出现n次(+的升级版)
/ab{3,}c/.test(‘abc’) => false /ab{3,}c/.test(‘abbbbbbbbc’) => true
g
修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
‘12a34b56c78d90e’.match(/\d+/) => [“12”]
‘12a34b56c78d90e’.match(/\d+/g) => [“12”, “34”, “56”, “78”, “90”]
i
修饰符用于执行对大小写不敏感的匹配。
‘aabAAcAa’.match(/aa/g) => [“aa”]
‘aabAAcAa’.match(/aa/gi) => [“aa”, “AA”, “Aa”]
m,
表明可以进行多行匹配,但是这个只有当使用^和$模式时才会起作用,在其他的模式中,加不加入m都可以进行多行匹配(不常用)
虽然量词的出现,能帮助我们处理一排密紧密相连的同类型字符。但这是不够的,我们用中括号表示范围内选择,大括号表示重复次数。如果想获取重复多个字符,我们就要用小括号进行分组了。
/(bye){2}/.test(‘byebye’)
=> true
/(bye){2}/.test(‘bye’)
=> false
反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,通过“\编号(在表达式中)”,“$编号(在表达式外)”进行引用。从1开始计数。
/(bye)\1/.test(‘byebye’) => true
/(bye)\1/.test(‘bye’) => false
‘123456’.replace(/(\d{3})*(\d{3})/, '$2$1’) => “456*123”
‘123456’.replace(/(\d{3})*(\d{3})/, function (match, $1, $2) {
return $2 + '’ + $1
})
=> “456*123”
匹配中文:[\u4e00-\u9fa5]
/[\u4e00-\u9fa5]+/.test(‘爱创课堂’)
=> true
/[\u4e00-\u9fa5]+/.test(‘aaa’)
=> false
检测是否是2到4位汉字
检测是否是手机号
检测是否是邮箱
检测昵称是否是由数字字母下划线组成
检测昵称是否是有汉字字母数字下划线组成
检测是否是数字,包括整数,小数 hello icketang
检测是否是本地电话,如010-12345678,0418-12345678
将用户输入的网址全部转化成我们的官网。如www.baidu.com=>www.icketang.com
实现trim(str)方法,过滤字符串首位空白
获取
内部文案
将div#demo.demo
转化成
//replace分组,直接在替代字符串中就用$1、$2来表示捕获的东西
var str = "Kobe Bryant";
str = str.replace(/(\w+)\s(\w+)/,"$2 $1");
console.log(str);//Bryant Kobe
var dictionary = {
xingming : "考拉",
nianling : "18",
xingbie : "女",
nvyougeshu : 500
}
var str = "大家好,我叫★xingming★,我今年★nianling★岁了,我是个可爱的★xingbie★生,我的女朋友有★nvyougeshu★个"
str = str.replace(/★(\w+)★/g,function(match,$1){
return dictionary[$1];
});
console.log(str);