javascript正则符号及方法入门

一、符号含义集合

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值