简单的转义字符:
转义:普通字符 特殊字符 相互双箭头转换
<script>
//想匹配字符串中的“//”
var str = "//我是注释";
var pattern = /\/\//;
console.log(pattern.exec(str));//返回的是["//"]
</script>
但是问题来了?如果特殊字符是\ 那么该怎么办 eg:var str =’’;此时会报错,因为\将’转义了
<script>
var str = '\\\\';//由于转义符号的作用,字符串里面只有两个\
console.log(str); //返回值是 \\
var pattern = /\\\\/;
console.log(pattern.exec(str)); //返回值是["\\"]
</script>
换行符:\n
//返回值是
//1.html
//2.css
//3.js
<script>
var str = '1.html \n 2.css \n 3.js';
console.log(str);
</script>
tab符(大空格) :\t
<script>
//注意不是空格,而是tab
var str = ' 1';
pattern = /\t/;
console.log(pattern.exec(str));
</script>
字符类
/[ ]/
^js
/[c-z]/ :里面至少要取到等,即[c-c]这种,此时取的是c,注意这里是有次序的,后面的字母顺序要靠后
<script>
//demo1
// var str = 'jsjkadhfjkhla';
//var pattern =/[hahsfjkdhalskfjh@jnhdsjk]/;
// console.log(pattern.exec(str));//此时返回的['j']//注意是用str里面的字符去匹配str里面的字符
//demo2
var str = 'asjkadhfjkhla';
var pattern =/[hahsfjkdhalskfjh@jnhdsjk]/;//用str去匹配pattern,落水三千,只取一个字符
console.log(pattern.exec(str)); //此时返回的值是["a"]
</script>
<script>
// ^,尖尖表示非的意思;注意理解
var str = 'asjkadhfkhla';
var pattern =/[^asf]/;
console.log(pattern.exec(str)); //此时返回的值是['j']
</script>
<script>
var str = '110';
//如果方括号/\d{1,}/在量词的后面加逗号是大于等于1,而在量词的前面加逗号是小于等于
var pattern = /\d{1,2}/;//方括号里面{1,2}的意思是匹配一个或者2个,由于贪婪的原则
//返回结果是['11']
console.log(pattern.exec(str));
</script>
<script>
var str = '肯德基豪华套餐 ¥15.5!';
//如果想匹配里面的金额数值,?是可有可无的意思,而*是大于等于0个
var pattern = /\d+?\.\d*/
console.log(pattern.exec(str));//返回值是["15.5"]
</script>
重复——贪婪与非贪婪的转换
<script>
//此处由于贪婪的影响,a+了之后输出的结果是['aaa']
var str = 'aaab';
var pattern = /a+/;
console.log(pattern.exec(str));
</script>
<script>
//转化为非贪婪直接加问号;注意非贪婪并不是只匹配一个,而是从左边开始,寻找最佳的匹配
var str = 'aaab';
var pattern = /a+?/;
//此时输出的结果为['a']
console.log(pattern.exec(str));
</script>
选择:|
<script>
//选择的符号是 | ;pattern中选择一个匹配(从左边开始选择)
var str = 'ab';
var pattern = /a|ab/
//这里输出的结果是['a'];
console.log(pattern.exec(str));
</script>
分组
<script>
var str = 'abab';
pattern = /ab+/;
//返回的结果是['ab'],因为ab+,默认的是abbbb~
console.log(pattern.exec(str));
</script>
<script>
var str = 'abba';
pattern = /ab+/;
//此时返回的结果是是['abb'];
console.log(pattern.exec(str));
</script>
<script>
//如何将+对ab整体实施影响呢,只需要加入括号
var str = 'abab';
pattern = /(ab)+/;
//此时返回的结果是是['abb'];
//返回的结果是['abab'];
console.log(pattern.exec(str));
</script>
<script>
var str = 'abcd';
//捕获性的分组
var pattern = /(ab)c/;
//注意这里弹出的结果是["abc","ab"]
console.log(pattern.exec(str));
</script>
<script>
var str = 'abcd';
//如何将其非捕获呢,只需要(?:ab)
var pattern = /(?:ab)c/;
//注意这里弹出的结果是["abc"]
console.log(pattern.exec(str));
</script>
<script>
var str = 'abcd';
var pattern = /(ab)(c)/;
//注意这里弹出的结果是["abc",'ab','c']
console.log(pattern.exec(str));
</script>
<script>
//对于多个捕获(括号,该怎么看呢,先去括号算一次,再从左往右看)
var str = 'abc';
var pattern = /(a(b(c)))/;
console.log(pattern.exec(str));//返回的结果是['abc','abc','bc','c']
</script>
引用
<script>
var str = 'ab cd ab';
// var pattern = /(ab) cd ab/;
//此处后面的ab可以用 \1来表示第一个分组 \2表示第二个分组,由于此处没有第二个分组不用管
var pattern = /(ab) cd \1/;
//返回的结果是['ab cd ab';'ab'];
console.log(pattern.exec(str));
</script>
<script>
//引用的应用
var str = '<p><a>这是一段文字</a></p>';
//对于 .*?:非贪婪模式,在匹配成功的模式下少重复
var pattern = /<([a-zA-Z]+)>(.*?)<\/\1>/;
//返回的值["<p><a>这是一段文字</a></p>", "p", "<a>这是一段文字</a>"]
console.log(pattern.exec(str));
</script>
位置匹配
^:首位匹配,不仅字符要对,而且位置也是在首位
$末尾匹配
单词边界匹配
<script>
//注意此处的首位匹配也是需要用到^的,之前正则讲的^的时候,是做非使用/[^dfs]/,此时是非
var str = 'html js';
var pattern = /^js/;
var pattern1 = /^ht/
console.log(pattern.exec(str));//此时返回的是null
console.log(pattern1.exec(str));//此时返回的是['ht']
</script>
<script>
//如在判断购物的数量和电话号码时如何验证所有输入的值都是数值的
var str = '4545dsfjakl412541';
//注意这里有很多思路,也可以/\D/
var pattern = /^\d+$/;//在首尾都是数字的情况下尽可能多的匹配
if(pattern.test(str)){
console.log("全是数字");
}else{
console.log("不全是数字");
}
</script>
<script>
//注意是单词边界@fdsf@,这里的边界就是@,\b
var str = 'dsf@hshs$4';
var pattern = /\bhs/;
//这里输出的结果是['hs'];
console.log(pattern.exec(str));
</script>