js的正则表达式

 1,什么叫做正则表达式

正则表达式(regular expression 简称 regexp)是一种描述字符串结构的语法规则,正则表达式是一个特定格式化模式,用于验证各种字符串是否匹配这个特征值,进而实现高级的文本查找,替换和截取内容等操作。

2,如何创建正则表达式 

1,字面量方式创建正则表达式

在字符前后加上//。

let str="chenaxstts";

/c/.test(str)

2,使用对象创建正则表达式

var patt=new RegExp(pattern,modifiers);

  • pattern(模式) 描述了表达式的模式
  • modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
 let ss=  new RegExp("c","g");
 console.log( ss.test("ccc*"))

修饰符

修饰符描述
i执行对大小写不敏感的匹配
g执行全局匹配(查找所有匹配而非找到第一个匹配后停止)
m执行多行匹配

注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:

var re = new RegExp("\\w+");
var re = /\w+/;
//  把字面量创建的\转译成对象创建的\\ 

 3,使用方法

 RegExp对象方法

方法描述
exec检索字符串中指定的值,返回找到的值,并确定其位置
test

检索字符串中指定的值,返回true和false

toString返回正则表达式的字符串

//exec的使用
 
 var str="world Hello";
 var patt=/Hello/g;
 console.log(patt.exec(str))

  //['Hello', index: 6, input: 'world Hello', groups: undefined]
var str="world Hello";
var patt=/Hello/g;

console.log(patt.test(str))
var patt = new RegExp("RUNOOB", "g");
var res = patt.toString();
console.log(res)

支持正则表达式string对象的方法 

方法描述
search检索与正则表达式相匹配的值
match找到一个或多个正则表达式的匹配。
replace替换与正则表达式匹配的子串。
split把字符串分割成字符串数组

  • search 方法
//search方法仅用于字符串查找
var str="Mr. Blue has a blue house";
console.log(str.search(/blue/i))
//4
  • match方法 
var str="你好 hello"
var result= str.match(/hello/g)
console.log(result)
/['hello']
  • replace方法

     语法string.replace(regexp|substr, newValue|function)

参数值

  searchValue (必须,规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。)

  newValue  (用于替换第一个参数所匹配到的字符 。(该参数中可以使用特殊的变量名。详见下面? 特殊变量名))

变量名 代表的值
$&替换与正则相匹配的字符串
$`(键盘tab上面的键)替换匹配字符串左边的字符
$‘(键盘enter旁边的键)替换 匹配字符串右边的字符
$n替换$1,$2,$,3,…,$n 匹配结果中对应的分组匹配结果

var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,'《$&》');
// 得到:"讨论一下《正则表达式》中的replace的用法"

var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,'《$`》');
// 得到:"讨论一下《讨论一下》中的replace的用法"
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,"《$'》");
// 得到:"讨论一下《中的replace的用法》中的replace的用法"
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/(正则)(.+?)(式)/,"《$1》$2<$3>");
// 得到:"讨论一下《正则》表达<式>中的replace的用法"

  function( 用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。(详见 下面? 函数作为参数)

 String.replace(regexp|substr,function(match, p1, p2, p3, offset, string){})

变量名代表的值
match匹配的子串
p1, p2, …假如replace()方法的第一个参数是一个RegExp对象,则代表第n个括号匹配的字符串 (如:/(\a+)(\b+)/ 这个正则来匹配,则p1就是匹配的\a+, p2就是匹配的\b+)
offset匹配到的子字符串在原字符串中的偏移量(即第其左侧有几个字符)
string被匹配的原字符串
NamedCaptureGroup命名捕获匹配的对象
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/(正则).+?(式)/,function() {
    console.log(arguments);
});
// ["正则表达式", "正则", "式", 4, "讨论一下正则表达式中的replace的用法"]



var sStr='讨论一下正则表达式中的replace的正则表达式用法';
sStr.replace(/(正则).+?(式)/g,function() {
    console.log(arguments);
});
// ["正则表达式", "正则", "式", 4, "讨论一下正则表达式中的replace的正则表达式用法"]
// ["正则表达式", "正则", "式", 19, "讨论一下正则表达式中的replace的正则表达式用法"]

3个重要的正则符号

括号

方括号"[" 内是需要匹配的字符(字符类/字符组)

花括号“{”内是指匹配字符的数量(量词)

圆括号 “(” 用来分组的

插入符号

“^” 表示正则开始

美元符号

美元符号“$”表示正则结束

  • 字符组

需要强调的是,虽叫字符组(字符类),但只是其中一个字符。例如[abc],表示匹配一个字符,它可以是“a”、“b”、“c”之一。

表达式描述
[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从0至9的数字
[a-z]查找任何从小写a到小写z的字符。
[A-Z]查找任何大写A到大写Z的字符。
[A-z]查找任何大写A到小写z的字符
[adgk]查找给定集合内的任何字符
[^adgk]查找给定集合外的任何字符
(red|blue|green)查找任何指定的选项。
  • 元字符

    元字符(Metacharacter)是拥有特殊含义的字符:

.元字符描述
.[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号...中的每个点,都可以理解成占位符,表示任何类似的东西
\w[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简写,也称单词字符。
  \W[^0-9a-zA-Z_]。非单词字符。
\d即 [0-9] 查找数字 其英文是digit(数字)
\D[^0-9]。表示除数字外的任意字符。
\s[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母。
\S非空白符。
\b匹配单词边界(不会消耗任何字符只匹配一个位置  boundary)
\B匹配非单词边界

\0

查找null字符
\n查找换行符(newline)
\f查找换页符 (form feed)
\r查找回车符 (return)
\t查找制表符 (tabs)
\v查找垂直制表符(vertical)
\xxx查找以八进制数xxx规定的字符

\xdd

查找以十六进制数dd规定的字符
\uxxxx查找以十六进制数xxxx规定的Unicode字符

量词(部分{}中的语法)

量词描述
n+

(出现一次或者多次(至少出现一次))

等价于{1,},表示出现至少一次。记忆方式:加号是追加的意思,得先有一个,然后才考虑追加。

n*

匹配任何包含零个或多个 n 的字符串。出现0次或者多次(任意次)

等价于{0,},表示出现任意次,有可能不出现。记忆方式:看看天上的星星,可能一颗没有,可能零散有几颗,可能数也数不过来。

n?

等价于{0,1},表示出现或者不出现。记忆方式:问号的意思表示,有吗?(出现零次或者一次(最多出现一次))

{n}

匹配出现n次

{n,}匹配至少出现n次
{n,m}

出现n到m次

n$匹配任何结尾为 n 的字符串。
^n匹配任何开头为 n 的字符串。
?=n匹配任何其后紧接指定字符串 n 的字符串。
?!n匹配任何其后没有紧接指定字符串 n 的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃蛋炒饭加蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值