JS-正则表达式


前言


一、JS正则

// 边界符号(一般用于精准匹配)
^ 以它开始
$ 以它结束

// 量词符号
* 重复0次或者更多次(可理解为乘法)
+ 重复1次或者更多次(可理解为加法)
? 重复0次或一次(可理解为三元表达式的?是否存在)
{n} 重复n次
{n, m} 重复n到m次
| 或者

RegExp对象

RegExp 对象用于将文本与一个模式匹配。

/ab+c/i; //字面量形式
new RegExp('ab+c', 'i'); // 首个参数为字符串模式的构造函数
new RegExp(/ab+c/, 'i'); // 首个参数为常规字面量的构造函数

二、实战

在一次做搜索高亮词的正则匹配时,遇到了无法正常转义特殊字符的情况。举个例子,当我在输入框逐字输入『青花瓷(周杰伦)』时,input框下会出现一系列的搜索sug词,此时我的正则匹配是这样的

let reg = RegExp(matching, 'i'); // matching是准备进行匹配的文本,这里只是简单的忽略了大小写,没有考虑到英文符号
const parts = text.split(reg);

当用户输入的是『青花瓷(周杰伦)』时,由于其中的英文括号没有经过转义影响到了正则匹配的规则,因此会出现报错的情况。在这里插入图片描述stackoverflow中给出的解决办法如下:

// To escape the RegExp itself:
const escapeRegExp = str => {
        return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
};
let reg = RegExp(escapeRegExp(matching), 'i');
const parts = text.split(reg);

例如

escapeRegExp("All of these should be escaped: \ ^ $ * + ? . ( ) | { } [ ]");

>>> "All of these should be escaped: \\ \^ \$ \* \+ \? \. \( \) \| \{ \} \[ \] "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值