正则表达式

正则表达式是表示搜索模式的特殊字符串。也被称为“regex”或“regexp”,它们可以帮助程序员匹配、搜索和替换文本。

简单使用

//测试myString 中是否含有Hello
let myString = "Hello, World!";
let myRegex = /Hello/;    //测试规则
// 使用.test方法
let result = myRegex.test(myString); //result为true

注意,/Hello/不会匹配HELLO、hello、HeLLo

多种模式匹配文字字符串

使用|操作符分隔条件,eg:匹配"dog""cat""bird"或者"fish"

let petString = "James has a pet cat.";
let petRegex = /dog|cat|bird|fish/;
let result = petRegex.test(petString);//true

匹配时忽略大小写(i)

let myString = "Hello, World!";
let myRegex = /Hello/i;    
// 使用.test方法
let result = myRegex.test(myString); //result为true

.match方法提取匹配项(注意使用方式)

"Hello, World!".match(/Hello/);
// Returns ["Hello"]

let extractStr = "Extract the word 'coding' from this string.";
let codingRegex = /coding/;
let result = extractStr.match(codingRegex); 

全局匹配(匹配多次)

let twinkleStar = "Twinkle, twinkle, little star";
let starRegex = /Twinkle/gi; 
let result = twinkleStar.match(starRegex); // ["Twinkle", "twinkle"]

注意:
在正则表达式上可以有多个标志,比如/search/gi(匹配多次包含大小写)

使用通配符" . "

let unRegex = /.un/;//unRegex以匹配字符串"run"、"sun"、"fun"、"pun"、"nun"和"bun"

将单个字符与多种可能性匹配[ ]

//匹配a、e、i、o、u
let quoteSample = "Beware of bugs in the above code; I have only proved it correct, not tried it.";
let vowelRegex = /[aeiou]/gi; 
let result = quoteSample.match(vowelRegex);

连字符-)来定义要匹配的字符范围

let alphabetRegex = /[a-z]/gi; 

匹配单个未指定的字符(^)

使用字符集中的插入符号(^)来创建一个否定字符集

//匹配所有非数字或元音字符的正则表达式
let quoteSample = "3 blind mice.";
let myRegex = /[^aeiou0-9]/gi; 
let result = quoteSample.match(myRegex);

在字符集之外,插入符号用于字符串的开头搜寻匹配模式。

//匹配以"Cal"开头出现的字符
let calRegex = /^Cal/; 

匹配字符串的末尾($)

let lastRegex = /caboose$/;

匹配出现一次或连续多次的字符(+)

//匹配到出现一次或多次的字母s
let myRegex = /s+/g;

匹配出现零次或多次的字符(*)

//匹配"A"及其之后出现的零个或多个"a"
let chewieRegex = /Aa*/;

贪婪匹配和惰性匹配

正则表达式默认为贪婪匹配,它会匹配到适合该匹配模式的最大子字符串。

eg:使用正则表达式/t[a-z]*i/应用于字符串"titanic",贪婪匹配结果为["titani"],你可以使用?字符来将其变成懒惰匹配。调整后的正则表达式/t[a-z]*?i/匹配字符串"titanic"返回["ti"]

匹配所有的字母和数字(\w)

这个缩写等同于[A-Za-z0-9_]。它不仅可以匹配大小写字母和数字,注意,它还会匹配下划线字符(_)。

//使用\w来计算所有引号中字母和数字字符的数量
let quoteSample = "The five boxing wizards jump quickly.";
let alphabetRegexV2 = /\w/g;
let result = quoteSample.match(alphabetRegexV2).length;//31

匹配非字母数字字符(\W)与\w相反

匹配所有数字(\d)等同于匹配[0-9],匹配不是数字的单个字符(\D)等同于[^0-9]

匹配空白字符(\s),匹配非空白字符(\S)

指定匹配的上限和下限({})

let timRegex = /ah{3,6}/;//匹配出现3次到6次的h
let timRegex = /ah{3,}/;//匹配出现3次及以上的h
let timRegex = /ah{3}/;//匹配仅出现3次的h

检查全部或无(?)

使用问号?指定可能存在的元素,这将检查前面的零个或一个元素。你可以将此符号视为前面的元素是可选的。

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

正向先行断言和负向先行断言

正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。正向先行断言的用法是(?=...),其中...就是需要存在但不会被匹配的部分。

负向先行断言会查看并确保搜索匹配模式中的元素不存在。负向先行断言的用法是(?!...),其中...是你希望不存在的匹配模式。如果负向先行断言部分不存在,将返回匹配模式的其余部分。

let quit = "qu";
let noquit = "qt";
let quRegex= /q(?=u)/;
let qRegex = /q(?!u)/;
quit.match(quRegex); // Returns ["q"]
noquit.match(qRegex); // Returns ["q"]

先行断言的更实际用途是检查一个字符串中的两个或更多匹配模式。这里有一个简单的密码检查器,密码规则是 3 到 6 个字符且至少包含一个数字:

let password = "abc123";
let checkPass = /(?=\w{3,6})(?=\D*\d)/;
checkPass.test(password); // Returns true

使用捕获组重用模式

括号(和)可以用来匹配重复的子字符串。你只需要把重复匹配模式的正则表达式放在括号中即可。

 使用捕获组,以匹配在字符串中仅重复三次的数字,每一个都由空格分隔。

let repeatNum = "42 42 42";
let reRegex = /^(\d+)\s\1\s\1$/; 
let result = reRegex.test(repeatNum);

使用捕获组搜索和替换(.replace)

let huhText = "This sandwich is good.";
let fixRegex = /good/;
let replaceText = "okey-dokey"; 
let result = huhText.replace(fixRegex, replaceText);

删除开头和结尾的空白

let hello = "   Hello, World!  ";
let wsRegex = /^\s+|\s+$/g;
let result = hello.replace(wsRegex,'');

 

转载于:https://www.cnblogs.com/glmkeep/p/11103197.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值