2021-07-25正则表达式

1.定义:正则表达式用于字符串的匹配
例子:通过/wwe/可以与函数匹配是否含有wwe,有则返回 true 没有则返回false
2.调用正则表达式的方法
<1>. .test()形式
例子:

let myString = "Hello, World!";
let myRegex = /Hello/;
let result = myRegex.test(myString); 

注意此时字符串的大小写是严格区分的。
<2>. " | "操作符:用于一次匹配多个字符串,每个字符串之间用“|”间隔。
例子:

let petString = "James has a pet cat.";
let petRegex = /dog|cat|bird|fish/; // 修改这一行
let result = petRegex.test(petString);

<3>.忽略字符串大小写的方式; " i " 。/字符串/i 即可实现。
例子:

let qq = "freeCodeCamp";
let fccRegex = /freeCodeCamp/i; // 修改这一行
let result = fccRegex.test(qq);

<4>. .match方法:用于匹配并返回匹配到的字符串。
例子:(借用freecodecamp中的)
注:.match用法与.test用法有形式区别,.match调用是qq在前而fccRegax作为括号内函数,.test 则是fccRegax在前,qq在括号内。

"Hello, World!".match(/Hello/);
let ourStr = "Regular expressions";
let ourRegex = /expressions/;
ourStr.match(ourRegex);
//这里第一个 match 将返回 ["Hello"] 第二个将返回 ["expressions"]。

<5>.全局匹配:上述表示的均为只能提取或搜寻一次的模式匹配匹配。而需要进行全局搜索匹配则需要用到“ g ”标识,其用法与“ i ”相同。
例子:

let twinkleStar = "Twinkle, twinkle, little star";
let starRegex = /Twinkle/gi; // 修改这一行
let result = twinkleStar.match(starRegex); // 修改这一行
//其中多个标识符同时使用时,不需要用符号隔开。

<6>.通配符:“ . ”用符号点来表示,表示任何字符,用在字符串中代替未知字符进行匹配。
例子:

let humStr = "I'll hum a song";
let hugStr = "Bear hug";
let huRegex = /hu./;
huRegex.test(humStr);
huRegex.test(hugStr);
//输出结果均为true

<7>.单个字符的多种匹配可能:在“[ ]"标识中加入有可能匹配的多个字符,不用分隔。
例子:

let bigStr = "big";
let bagStr = "bag";
let bugStr = "bug";
let bogStr = "bog";
let bgRegex = /b[aiu]g/;
bigStr.match(bgRegex);
bagStr.match(bgRegex);
bugStr.match(bgRegex);
bogStr.match(bgRegex);
//按顺序排列,四次 match 调用将返回值 ["big"]、["bag"]、["bug"] 和 null。

**<8>.**连字符:用来简化可能字符的书写量” - ”,表示两字符间的所有字符集合
例子:


```javascript
let catStr = "cat";
let batStr = "bat";
let matStr = "mat";
let bgRegex = /[a-e]at/;
catStr.match(bgRegex);
batStr.match(bgRegex);
matStr.match(bgRegex);
//按顺序排列,三次 match 调用将返回值 ["cat"],["bat"] 和 null。

<9>.否定字符集“^”,例如,/ [^aeiou] /gi 匹配所有非元音字符。
<10>." + "标识符用法:与.match有些相似,用于匹配出现一次或多次的字符,返回特点:
例如,/a+/g 会在 abc 中匹配到一个匹配项,并且返回 [“a”]。 因为 + 的存在,它也会在 aabc 中匹配到一个匹配项,然后返回 [“aa”]。
<10>.“ * ”用来匹配出现一次或多次的字符,其用法如下:

let soccerWord = "gooooooooal!";
let gPhrase = "gut feeling";
let oPhrase = "over the moon";
let goRegex = /go*/;
soccerWord.match(goRegex);
gPhrase.match(goRegex);
oPhrase.match(goRegex);

按顺序排列,三次 match 调用将返回值 [“goooooooo”],[“g”] 和 null。

<11>.惰性匹配:1.在重复量词后面添加问号(?)即可形成惰性匹配。
2.惰性匹配会尽可能少的匹配字符,但是必须要满足整个匹配模式。
例子:

语法结构语义解释
*?可以重复任意次,但是尽可能重复少的次数。最少为0次
+?可以重复1次或者任意多次,但是尽可能重复少的次数,不过最少次数是1。
??可以重复0次或1次,但尽可能少重复。
{n,m}?可以重复n到m此,但尽可能少重复,最少匹配次数是n。
{n,}?可以重复n次以上,但尽可能少重复,最少匹配n此。

<12>.匹配字符的开头:
” ^ “脱字符可用于匹配字符开头用于匹配字符串的开始位置:

let firstString = "Ricky is first and can be found.";
let firstRegex = /^Ricky/;
firstRegex.test(firstString);
let notFirst = "You can't find Ricky now.";
firstRegex.test(notFirst);

第一次为true,第二次为false
<13>."$"放于匹配字符后方表示对字符串末尾进行的匹配模式:

let theEnding = "This is a never ending story";
let storyRegex = /story$/;
storyRegex.test(theEnding);
let noEnding = "Sometimes a story will have to end";
storyRegex.test(noEnding);

第一次 test 调用将返回 true, 而第二次调用将返回 false
<14>. " \w"字符的用法:相当于元字符
例子:

let longHand = /[A-Za-z0-9_]+/;
let shortHand = /\w+/;
let numbers = "42";
let varNames = "important_var";
longHand.test(numbers);
shortHand.test(numbers);
longHand.test(varNames);
shortHand.test(varNames);

其返回值均为真。
<15>. 匹配除了字母和数字的所有符号:与“ \w ”类似,“\W”为相反匹配,值匹配除了字母和数字的所有符号。
例子:

let shortHand = /\W/;
let numbers = "42%";
let sentence = "Coding!";
numbers.match(shortHand);
sentence.match(shortHand);

第一次 match 调用将返回值 ["%"] 而第二次调用将返回 ["!"]。
<16>. 只匹配数字:用“\d"等同于元字符[0-9]。但英文书写不算,例(six)。
例子:计算数字的长度。

let movieName = "2001: A Space Odyssey";
let numRegex = /\d/g; // 修改这一行
let result = movieName.match(numRegex).length;

<17>.匹配所有非数字:使用大写D,"\D".与上文相似。
<18>.匹配空白字符:可以使用 \s 搜寻空格,其中 s 是小写。 此匹配模式将匹配空格、回车符、制表符、换页符和换行符。 可以认为这类似于元字符 [ \r\t\f\n\v]。
例子:

let whiteSpace = "Whitespace. Whitespace everywhere!"
let spaceRegex = /\s/g;
whiteSpace.match(spaceRegex);

这个 match 调用将返回 [" ", " "]。
<19>.匹配非空白字符: “\S”,用法与上述相似。搜寻除了空格之外的所有内容。。 此匹配模式将不匹配空格、回车符、制表符、换页符和换行符。 可以认为这类似于元字符 [^ \r\t\f\n\v]。

<20>.指定匹配的上限和下限:使用“{ , }”来表示上限与下限。
例子:

let A4 = "aaaah";
let A2 = "aah";
let multipleA = /a{3,5}h/;
multipleA.test(A4);
multipleA.test(A2);

第一个为真,第二个为假。
<21>.只匹配上限“{数字,}“即可。
<22>.指定匹配的确切数量:"{数字}”即可。
<23>.可选符号:“?”:
例如,美式英语和英式英语略有不同,可以使用问号来匹配两种拼写。

let american = "color";
let british = "colour";
let rainbowRegex= /colou?r/;
rainbowRegex.test(american);
rainbowRegex.test(british);

修改正则表达式 favRegex 以匹配美式英语(favorite)和英式英语(favourite)的单词版本。
<24>.删除开头和结尾的空白:
形式:

2、使用正则表达式
str.replace(/^\s+|\s+$/g, "");

语法:
语法:/(正则)/g
//之间的是正则,后面的g表示全局匹配
\s+去掉开头的空格。表示开头,\s是空格,+匹配1或多个字符,所以这里的意思就是匹配开头的1或多个空格
\s+ 去 掉 结 尾 的 空 格 。 去掉结尾的空格。 表字符串结尾,表示匹配结尾的1或多个空格,
中间的|表示匹配左边或者右边的正则,所以一个字符串只要开头或结尾有空格,空格的部分就会被匹配到
然后第二个参数""是匹配到的内容被替换的内容,也就是替换成空串。
例子:

let hello = "   Hello, World!  ";
let wsRegex = /^\s+|\s+$/g; // 修改这一行
let result = hello.replace(wsRegex,""); // 修改这一行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值