补充
*1  转义字符 \
2  行结束符 \r
3  字符串换行符 \n(即回车等于\r\n)
4  缩进字表符  相当于tab键 \t
5  多行字符串
如
var test  = “\
<\span>\
“;
//如此就实现了字符串多行 因为如果不写转义字符可能达不到换行的效果
正则表达式RegExp
作用  匹配特殊字符或有特殊搭配原则的字符的最佳选择
可以查询 w3cschool
正则表达式的属性
1  i  执行对大小写不敏感的匹配  即忽视大小写
2  g  执行全局匹配(查找所有匹配的项而非在找到第一个匹配后停止)
3  m  执行多行匹配
两种创建方式
1  直接量  var reg = / 匹配原则 /正则表达式属性;
例一
var reg = /abc/ ;
//此时就可以判断字符串是否符合正则表达式abc这样的原则
reg.test(“abcd”);
//返回true
例二
var reg = /abc/i;
reg.test(“ABCd”);
//返回true
2  new RegExp(字符串形式的规则,字符串形式的属性);
例一
var reg = new RegExp(“^a”,”gm”);
或
var reg = /^a/gm ;
var reg = new RegExp(reg);
//^a表示的意思是匹配以a开头的
var str = “abc\na”;
str.match(reg);
//返回两个a  因为这里m是多行匹配  如果没有m就只返回一个a
表达式
方括号用于查找某个范围内的字符  一个方括号[ ]代表一位  方括号里面的内容即为所要查找的范围
如  var reg = /[123][123][123]/g;
//全局范围查找的连着的三个数  且这三个数的每一位都要是1 2 3的其中一个数
//如  “12309asv78as121”;  返回的是 [“123”,”121”]
[^abc]  表示的是查找不在括号间的字符
[0-9]  表示查找任何0-9的数字
[A-z]  表示查找任何从大写A到小写z的字符(按ASC码表顺序排的)
(abc | bcd)  表示查找带有 abc 或 bcd 的字符
元字符
1  .  查找单个字符  但除了换行和行结束符外
如
var reg = /./g;
var str = “1 a”;
//返回 [“1”, “ “, “a”]
2  \w  查找单词字符  相当于[0-9 A-z _ ]
\W  查找非单词字符  即[^\w]
3  \d  查找数字  相当于[0-9]
\D  查找非数字  即[^\d]
4  \s  查找空白字符  空白字符包括空格符  制表符\t  回车符\r  换行符\n  垂直制表符\v  换页符\f  即[\t\r\n\v\f ]
\S  查找非空白字符  即[^\s]
5  \b  匹配单词边界  如  reg = /\bc/g;  “abc cde efg”  单词边界如 abc的a和c、cde的c和e、efg的e和f
 匹配以c边界开头的  即返回cde
\B  匹配非单词边界  即[^\b]
6  \t  匹配制表符  注意是要真的写在字符里面的\t才行  而不只是视觉上的  如  “abc\tcde”
……
量词(遵循的是贪婪匹配  能匹配多就尽量匹配多)
    (若不想遵循贪婪匹配  可以在表达式后面加?  能尽量匹配少就尽量匹配少)
1  n+  匹配任何包含至少一个 n 的字符串  即 n 可以出现1到无限次
如  var reg = / \w+/g;
var str = “abc”;
//即符合\w的字符出现多少次都可以
//输出”abc”
2  n  匹配任何包含零个或多个 n 的字符串
如  var reg = /\w/g;
var str = “abc”;
//其匹配的依据是根据光标的位置  如果能匹配的话就先把值匹配了
//若根据规则匹配不出来  那么在光标处返回一个空串
//输出 [“abc”, “”]
var reg = /\d/g;
var str = “abc”;
//这里根据\d规则无法匹配字符串里的字符  那么全局匹配光标共有四处
//a前a后  b后  c后
//所以输出四个空串  [“”, “”, “”, “”];
var reg = /a?/g;
var str = “aaa”;
//这里不遵循贪婪匹配  能不匹配尽量不匹配
//所以返回四个空串  [“”, “”, “”, “”];
3  n?  匹配任何包含零个或一个 n 的字符串  规则同上差不多
4  n{X}  匹配包含 X 个 n 的序列的字符串
    n{X,Y}  匹配包含 X 至 Y 个 n 的序列的字符串
    n{X, }  匹配包含至少 X 个 n 的序列的字符串
如  var reg = /\w{2}/g;
var str = “abc”;
//返回  “ab”
var reg = /\w{2,4}/g;
var str = “abcab”;
//返回  “abca”  最后一个b因为不满足两个字符所以无法匹配
5  n$  匹配任何结尾为 n 的字符串
    ^n  匹配任何开头为 n 的字符串
如  var reg = /^abc$/g;
var str = “abcabc”;
//即以abc开头  以abc结尾  且abc要是同一个abc
//所以返回null
6  ?=n  匹配任何其后紧接指定字符串 n 的字符串(正向预查/正向断言)
    ?!n  匹配任何其后没有紧接指定字符串 n 的字符串
如  var reg = /a(?=b)/g;
var str = “abcabc”;
//匹配的是字符a后面跟着字符b的字符a
//符合的有两个  所以输出两个a [“a”,”a”]
var reg = /a(?!b)/g;
var str = “abcabc”;
//匹配的是字符a后面不跟着字符b的字符a
//没有符合的  所以输出null
正则表达式对象的方法
1  test  检索字符串中指定的值  返回 true 或 false
*2  exec  检索字符串中指定的值  返回找到的值  并确定其位置  此时lastIndex指向匹配字符串所在位置的下个位置
   若为全局匹配  则下次匹配时  从lastIndex位置开始匹配  我们也可以认为的修改lastIndex的值
   若为匹配的重复字符(见下面拓展)  那么还会返回子表达式的匹配内容
如
<script>//例一var reg = /ab/g;var str = "abcabcab";console.log(reg.exec(str)); //["ab", index: 0]console.log(reg.lastIndex); //2console.log(reg.exec(str)); //["ab", index: 3]console.log(reg.lastIndex); //5console.log(reg.exec(str)); //["ab", index: 6]console.log(reg.lastIndex); //8console.log(reg.exec(str)); //nullconsole.log(reg.lastIndex); //0//匹配完后从头开始console.log(reg.exec(str)); //["ab", index: 0]console.log(reg.lastIndex); //2//例二var reg = /(\w)\1(\w)\2/g;var str = "aabb";console.log(reg.exec(str)); // ["aabb", "a", "b", index: 0]</script>
拓展
怎么实现匹配重复的字符
(n)\1  表示括号中匹配 n 的内容  然后反向引用给\1  这里数字可以随便写  但是会根据你需要重复的字符来设置
如  var reg = /(\w)\1\1/g;
var str = “aaabbb”;
//先匹配\w为字符a  再将a引用给后面的两个\1\1
//所以结果为  [‘aaa’,’bbb’]
var reg = /(\w)\1(\w)\2/g;
var str = “aabb”;
//先匹配\w为字符a  再将a引用给后面的\1
//再匹配\w为字符b  再将b引用给后面的\2
//所以结果为  [‘aabb’]
例 string的replace方法
1  replace(str1,str2)
可以用str2替换字符串中的str1字符  不过默认只替换符合要求的第一个
如  “ab”.replace(“a”,”b”);  结果为 “ba”
2  replace(reg,str)
若是配合正则表达式的全局匹配来使用就可以全部替换
如
var reg = /(\w)\1(\w)\2/g;
var str = “aabb”;
str.replace(reg,”$2$2$1$1”);  //可以用$来引用正则表达式中的匹配内容
//结果即为bbaa
3  replace(reg,function($,$1,$2) { } )
这里$代表全局匹配到的内容  没什么用
$1表示第一个子表达式的匹配到的内容
$2表示第二个子表达式的匹配到的内容
如
var reg = /(\w)\1(\w)\2/g;
var str = “aabb”;
str.replace(reg,function($,$1,$2){
return $2+$2+$1+$1;
});
//结果即为bbaa
例  将 the-first-name 变为 theFirstName
        var reg = /-(\w)/g;
        var str = “the-first-name”;
        console.log(str.replace(reg,function($,$1){
            return $1.toUpperCase();
        }));**
