javascript正则符号及方法入门

xiaoxiao2021-02-28  55

一、符号含义集合

1.^

表行开头

2.$

表行结尾

3.[^5-9]

中括号中使用^表排除,比如以上表达式表示除5-9以外的任意字符。

4..

英文中的句号,也就是一个点,使用来匹配任意字符的简便写法。

注:当元字符出现在小括号内时表示枚举。

[1-9.] 匹配1到9的数字或是一个.。

5.|

或字符,表示或关系,比如(S|s)teven

6.?

表可选项,表允许出现这样的字符。出现一次或0次。

4(th)? july?

7.+

表之前的元素出现一次或多次。

8.*

表之前的元素出现0次或多次。

符号含义?出现0次或一次+出现一次或多次*出现0次或多次{5,9}量词,出现限定次数,这里指出现五次到九次

二、反向引用

使用\1,\2…这种引用方式匹配字符串中被括号引用的值。

比如:使用正则表达式([0-9])\1去匹配23-11--43-32匹配结果为11因为反向引用的值必须与括号内实际的值相同也就是说括号的值虽然可以从0到9多选,但是引用时这个值必须与括号内的值相同

三、匹配字符

1.\b

匹配一个字边界,即字与空格间的位置。

2.\D

匹配一个非字边界,等价于[^\b]

3.\d

等价于[0-9],能匹配所有的Unicode数字。

4.\D

非数字字符,等价于[^\d]。

5.\w

匹配所有单词中的字符。等价于[a-zA-Z0-9_]

6.\W

非单词字符,等价于[^\w]。

7.\s

匹配所有空白字符(不可见字符),等价于[·\f\n\r\t\v]

\f 匹配一个换页符。等价于\x0c和\cL。\n 匹配一个换行符。等价于\x0a和\cJ。\r 匹配一个回车符。等价于\x0d和\cM。\t 匹配一个制表符。等价于\x09和\cI。\v 匹配一个垂直制表符。等价于\x0b和\cK。

8.\S

匹配所有非空白字符,等价于[^\s]

四、常用正则方法

0. RegExp 构造函数

用于创建一个正则表达式的构造函数。

(1)参数是字符串的正则构造写法

let regex = new RegExp('xyz', 'i'); // equals let regex = /xyz/i;

(2)参数是正则表达式的正则构造写法

let regex = new RegExp(/xyz/i); // equals let regex = /xyz/i;

(3)重复定义修饰符会覆盖前边定义的修饰符

let regex = new RegExp(/abc/ig, 'i'); // equals let regex = new RegExp(/abc/i);

1. match

用于检索字符串中是否包含指定的字符串。

基本格式:.match()

let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; let regexp = /[A-E]/gi; let matches_array = str.match(regexp); // ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e'] 括号中可以是一个正则表达式也可以是一个字符串。返回的结果可能为null、一个对象(匹配到一个结果)或是一个数组(匹配到多个结果)。

2. replace

用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

基本格式:<String>.replace(<RegExp>,<replacer>)

返回结果:被替换后的字符串。

let str='abc123!!!'.replace(/([^\d]*)(\d*)([^\w]*)/,$1$2$3+'222'); //"abc123!!!222" //$1、$2、$3分别代表括号中匹配到的内容 变量名代表的值 1 1 − 9对应括号中匹配到的第n个字符串$$插入一个 “$”。$&插入匹配的子串。$`插入当前匹配的子串左边的内容。$’插入当前匹配的子串右边的内容。$n假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。

3.match

检测字符串中是否有匹配检到的结果,找到一个或多个正则表达式的匹配。

基本格式:str.match(regexp)

返回值:匹配到的结果,可以是一个对象(匹配到的一个结果hu或是null),或是一个数组(匹配到的多个结果)。

let str="1 plus 2 equal 3" str.match(/\d+/g); //1,2,3 str.match('equal'); //["equal", index: 9, input: "1 plus 2 equal 3", groups: undefined]

4.split

方法用于把一个字符串分割成字符串数组。split第一个参数为匹配的正则表达式(设置分割规则)。必填。split的第二个参数用于设置匹配到数组的长度。选填。如果把空字符串 (“”)作为第一个参数,将会把字符串每个字符转换为数组中的一项。String.split() 执行的操作与 Array.join 执行的操作正好相反。 let str='interesting'; str.split(); //["interesting"] str.split(''); //(11) ["i", "n", "t", "e", "r", "e", "s", "t", "i", "n", "g"] str.split('',5); //(5) ["i", "n", "t", "e", "r"] str.split('e'); //(3) ["int", "r", "sting"] str.split(/[tn]/gi); //(5) ["i", "", "eres", "i", "g"]

5.exec

用于检索字符串中的正则表达式的匹配。基本格式:string.exec(regexp)如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。要匹配多个结果可使用循环,代码如下 let str = "interesting"; let patt = /e/g; while ((result = patt.exec(str)) !== null) { console.log(result); } // ["e", index: 3, input: "interesting", groups: undefined] // ["e", index: 5, input: "interesting", groups: undefined]

使用圆括号进行组匹配。

const RE_DATE = /(\d{4})-(\d{2})-(\d{2})/; const matchObj = RE_DATE.exec('1999-12-31'); const year = matchObj[1]; // 1999 const month = matchObj[2]; // 12 const day = matchObj[3]; // 31

flags与source

用于返回正则表达式的修饰符。

// ES5 的 source 属性 // 返回正则表达式的正文 console.log(/abc/ig.source); // "abc" // ES6 的 flags 属性 // 返回正则表达式的修饰符 console.log(/abc/ig.flags); // 'gi'

五、断言

1.先行断言

x只有在y前面才匹配,必须写成/x(?=y)/。比如,只匹配百分号之前的数字,要写成/\d+(?=%)/。

检测%前边的数字。 /\d+(?=%)/.exec('100% of US presidents have been male') // ["100"]

2.先行否定断言

x只有不在y前面才匹配,必须写成/x(?!y)/。比如,只匹配不在百分号之前的数字,要写成/\d+(?!%)/。

检测前边不是%的数字 /\d+(?!%)/.exec('inter 5%') // null

3.后行断言

x只有在y后面才匹配,必须写成/(?<=y)x/。 /(?<=\$)\d+/.exec('Benjamin Franklin is on the $100 bill') // ["100"]

4.后行否定断言

x只有不在y后面才匹配,必须写成/(? /(?<!\$)\d+/.exec('its is worth about90') // ["90"] /(?<!\$)\d+/.exec('its is worth about $9') // null

END

转载请注明原文地址: https://www.6miu.com/read-2632430.html

最新回复(0)