在某网课学习前端笔记整理js篇24-js正则表达式

js正则表达式(regular expression)

一、js正则表达式的写法

正则表达式是*通过简单的字符描述我需要的字符串格式*,比如电话号码是啥样的。然后通过一些方法可以找到一个字符串中我需要的字符,或者替换这些字符。

正则的匹配的是字符和位置。’abcd‘有4个字符和5个位置。

http://www.jb51.net/article/110516.htm感觉这个写的满靠谱的。

#####1.正则对象RegExp

example1

//正则对象的创建
var regex = new RegExp('a','g');
var regex = /a/g;

上面两种创建方式都可以,推荐第二种。为啥?字少啊。

2.转义符

特殊含义的字符需要转移,比如\:

example2

var regex = /aa\\/;//这里的'\\'表示'\'
3.锚点

用来描述开始(^)和结束($)。

example3

var regex = /^abc$/;//匹配的是开始后面是abc,然后就是结束了。
4.标识符

全局匹配g(global),忽略大小写i(ignoreCase),多行匹配m(multline)。

example4

var regex = /a/gi;//这里是全局匹配且忽略大小写
5.常用的元字符
字符描述
\d数字0-9
\D非数字
\w字母、数字、下划线
\W非字母、数字、下划线
\s空白字符
\S非空白字符
\b单词边界。er\b匹配reffer,但不匹配person
\B和\b相反
.除(\n,\r)的其他单个字符
其他的不列举了

example5

var regex = /\ba/;
console.log(regex.test('abc'));//true
console.log(regex.test('xabc'));//false
6.字符集

[]^^[]中间或者单独使用表示^字符,否则表示非。

example6

var regex = /[1a_][a-z][^A-S][0-9]/;
//1、a、_中的任意一个字符 + a到z之间的任意一个字符 + 非A到S之间的任意一个字符 + 0到9之间的数字
7.量词
字符描述
*>=0
+>=1
?0或1
{m}m
{m,}>=m
{m,n}>=m&&<=n

example7

var regex = /a*b+c?d{2}e{3}f{3,6}/;
//>=0个a + >0个b + 0或1个c + 2个d + 3个e + 3到6个f

默认的量词为贪婪模式,量词后面在加个就是惰性模式。关于解释可以看:http://blog.csdn.net/xlei1123/article/details/51755064。

贪婪模式: 会尽可能多的去匹配满足的字符。

惰性模式: 会尽可能少的去匹配满足的字符。

example8

var str = 'aaab';
var regex = /a+?/g;
var regex2 = /a+/g;
console.log(str.match(regex));//["a", "a", "a"]
console.log(str.match(regex2));//["aaa"]
8.子集

()用来分组,且分的组会作为一种匹配产生一个子集。

example9

var str = 'abcbcdef abcbcdefg';
var regex = /a(bc){1,2}d/g;
console.log(str.match(regex));//["abcbcd", "abcbcd"]
console.log(regex.exec(str));//["abcbcd", "bc", index: 0, input: "abcbcdef" ]

**非捕获性分组: ** (?:pattern)(?=pattern)(?!pattern)(?<=pattern)(?<!pattern)这5个分组都不会作为匹配的子集。后四个不会作为匹配结果。后两个js好像不兼容(测试了下,谷歌兼容,ie不兼容)。

example10

var regex = /a(?:bc)/;
var str = 'abcd';
console.log(regex.exec(str));//["abc", index: 0, input: "abcd"]
regex.compile('a(?=bc)');
console.log(regex.exec(str));//["a", index: 0, input: "abcd"]

正向前瞻: (?=pattern),有的地方叫正向肯定预查(look ahead positive assert),匹配后面满足pattern,不获取 匹配结果。

负向前瞻: (?!pattern),有的地方叫正向否定预查(negative assert),不匹配后面pattern,不获取 匹配结果。

example11

var regex = /a(?=b)/;
var str = 'abc';
console.log(regex.test(str));//true
regex.compile('a(?!b)');
console.log(regex.test(str));//false

正向后瞻: (?<=pattern),有的地方叫反向肯定预查(look behind),匹配前面满足pattern,不获取 匹配结果。ie不兼容。

负向后瞻: (?<!pattern),有的地方叫反向否定预查,不匹配前面pattern,不获取 匹配结果。ie不兼容。

example12

var regex = /(?<=b)a/;
var str1 = 'ab', 
    str2 = 'ba';
console.log(regex.test(str1));//false
console.log(regex.test(str2));//true
9.反向引用

\n表示引用前面第n个分组的引用。

example13

var regex = /(a)b\1/;//aba
var str = 'aba';
console.log(regex.exec(str));//["aba", "a", index: 0, input: "aba"]
10.或

example14

var regex = /ab|cd/;
console.log(regex.test('abc'));//true
console.log(regex.test('cde'));//true

####二、js正则对象RegExp的属性和正则的一些方法

1.正则对象RegExp和其正则方法

example15

//正则对象的创建
var regex = new RegExp('a','g');
var regex = /a/g;

上面两种创建方式都可以,推荐第二种。为啥?字少啊。

​ RegExp构造函数包含一些属性,适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。

  • RegExp.input或RegExp["$_"]:最近一次要匹配的字符串
  • RegExp.lastMatch或RegExp["$&"]:最近一次匹配项
  • RegExp.lastParen或RegExp["$+"]:最近一次匹配的捕获组
  • RegExp.leftContext或RegExp["$`"]:input字符串中lastMatch之前的文本
  • RegExp.rightContext或RegExp["$’"]:input字符串中lastMatch之后的文本
  • RegExp["$n"]:表示第n个捕获组的内容,n取1-9

regex.compile(pattern, model): 修改正则对象的参数。

regex.exec(str): 将匹配的结果返回,返回值是一个数组(找不到返回null),包括匹配的字符和子集。如果是全局模式,那么regex会记录一个lastIndex,表示最后一次查询到的位置,下一次查询从这个位置开始。

regex.test(str): 匹配成功返回true,失败返回false。同样,如果是全局模式(g),那么下一次匹配会从lastIndex开始。

example16

var regex = /(ab)c/g;
var str = 'abcab';
console.log(regex.exec(str),regex.lastIndex);//["abc", "ab", index: 0, input: "abcab"] 3
console.log(regex.exec(str),regex.lastIndex);//null 0
console.log(regex.exec(str),regex.lastIndex);//["abc", "ab", index: 0, input: "abcab"] 3
console.log(regex.test(str),regex.lastIndex);//false 0
console.log(regex.test(str),regex.lastIndex);//true 3
console.log(regex.test(str),regex.lastIndex);//false 0
2.string的正则相关方法

str.search(regex): 返回匹配到的位置。匹配失败返回-1.

example17

var regex = /a/g;
var str = 'abcabc';
console.log(str.search(regex));//0

str.split(regex): 将字符串按照正则分割。返回数组。

example18

var regex = /a/;
var str = 'abcabc';
console.log(str.split(regex));// ["", "bc", "bc"]

str.replace(regex, str): 将字符串满足的地方用str替换。指定g修饰符,则会替换所有匹配正则的地方,否则只替换第一处。第二个参数是字符串可以使用一些特殊的字符序列,将正则表达式操作的值插进入,这是很常用的。

  • $n:匹配第n个捕获组的内容,n取0-9
  • $nn:匹配第nn个捕获组内容,nn取01-99
  • $`:匹配子字符串之后的字符串
  • $’:匹配子字符串之前的字符串
  • $&:匹配整个模式得字符串
  • $ : 表 示 :表示 符号本身

example19

var regex = /(a)bc/g;
var str = 'abc abc';
console.log(str.replace(regex,'$1:$3:$`:$&:$$'));//a:$3::abc:$ a:$3:abc :abc:$

str.match(regex): 在字符串上调用match方法,和在正则上调用exec结果一样的。但是在全局时,match方法返回的结果数组是没有input和index属性的,也没有子集,并且会将所有满足的都返回,而exec每次执行只返回第一个匹配的结果。

example20

//match和exec在全局的不同
var regex = /a(b)/g;
var str = 'abcabc';
console.log(regex.exec(str));//["ab", "b", index: 0, input: "abcabc"]
console.log(str.match(regex));//["ab", "ab"]

最后两个东西,看下面:

example21

// 匹配中文
var str = "aa1511132小";
var pattern = /[\u4e00-\u9fa5]/; 
console.log(pattern.test(str));//true

example22

var regex = /a/g;
var str = 'abc';
console.log(regex.test(str));//true
cosole.log(regex.test(str));//false
//全局的,会一个个匹配,RegExp的lastIndex记录了匹配的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值