前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js正则表达式转义字符-【JavaScript正则表达式RegExp】

js正则表达式转义字符-【JavaScript正则表达式RegExp】

作者头像
囍楽云
发布2022-12-26 14:31:45
2.1K0
发布2022-12-26 14:31:45
举报
文章被收录于专栏:囍楽云博客

  `x

  y(这里是没有 ` 的)

  x{n}

  匹配 n 次(n 为正整数)

  x{n,m}

  匹配至少 n 次,最多 m 次(n 和 m 为正整数)

  x{n,}

  匹配至少 n 次(n 为正整数)

  1、贪婪模式:

  默认情况下,正则表达式引擎会尝试尽可能多地重复量词字符。例如,\d+ 会消耗所有可能的字符。当无法消耗更多(在尾端没有更多的数字或字符串)时,然后它再匹配模式的剩余部分。如果没有匹配,则减少重复的次数(回溯),并再次尝试。

  2、惰性模式:

  正如我们所见,惰性模式并不是贪婪搜索的“灵丹妙药”。另一种方式是使用排除项“微调”贪婪搜索,如模式 "1+"。

  词边界:

  词边界 \b 是一种检查,就像 ^ 和 $ 一样。

  当正则表达式引擎(实现正则表达式搜索的程序模块)遇到 \b 时,它会检查字符串中的位置是否是词边界。

  有三种不同的位置可作为词边界:

  捕获组:

  模式的一部分可以用括号括起来 (...)。这被称为“捕获组( group)”。

  它允许将匹配的一部分作为结果数组中的单独项。如果我们将量词放在括号后,则它将括号视为一个整体。

  嵌套组:括号可以嵌套。在这种情况下,编号也从左到右。

  可选组:即使组是可选的并且在匹配项中不存在(例如,具有量词 (...)?),也存在相应的 result 数组项,并且等于 。

  命名组:在左括号后紧跟着放置 ? 即可完成对括号的命名。

  替换中的捕获组:用到字符串的方法

  让我们能够替换 str 中 regexp 的所有匹配项的方法 str.(regexp, ) 允许我们在 字符串中使用括号中的内容。这使用 $n 来完成,其中 n 是组号。

  非捕获组:

  有时我们需要用括号才能正确应用量词,但我们不希望它们的内容出现在结果中。

  可以通过在开头添加 ?: 来排除组。

  RegExp高级: 前瞻断言和后瞻断言: 模式类型

  X(?=Y)

  肯定的前瞻断言

  X(?!Y)

  否定的前瞻断言

  (?1、前瞻语法:

  x(?=y),它表示“仅在后面是 Y 时匹配 X”。There may be any of X and Y.

  那么对于一个后面跟着 € 的整数js正则表达式转义字符,正则表达式应该为:\d+(?=€)。

   let str = "1 turkey costs 30€";

代码语言:javascript
复制
    alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1 可以嵌套连续判定 成功继续判断 全部满足则匹配

  2、否定的前瞻语法:

  假设我们想要一个数量,而不是来自同一字符串的价格。那是一个数字 \d+,后面不是 €。

  为此,我们可以使用否定的前瞻断言。

  语法是:X(?!Y),意思是“搜索 X,但前提是后面没有 Y”。

   let str = "2 turkeys cost 60€";

代码语言:javascript
复制
    alert( str.match(/\d+\b(?!€)/g) ); // 2(60€ 不匹配)

  3、后瞻断言

  前瞻断言允许添加一个“后面要跟着什么”的条件判断。

  后瞻断言也类似,只不过它是在相反的方向上进行条件判断。也就是说,它只允许匹配前面有特定字符串的模式。

  语法为如下:

   let str = "1 turkey costs $30";

代码语言:javascript
复制
    // 美元符号被转义 \$
    alert( str.match(/(?/g) ); // 2(价格不匹配)

  3、与捕获组结合:

  一般来说,前瞻断言和后瞻断言括号中的内容不会成为结果的一部分。

  例如,在模式 \d+(?!€) 中,€ 符号就不会出现在匹配结果中。这是很自然的事:我们寻找一个数字 \d+,而 (?=€) 只是一个测试,表示要匹配的数字后面应该紧跟着 € 字符。

  但在某些情况下,我们可能还想捕获前瞻断言和后瞻断言所匹配的内容,或者部分内容。这也是可行的。只需要将该部分包装在额外的括号中。

  在下面的示例中,货币符号 (€|kr) 和金额一起被捕获了:

代码语言:javascript
复制
let str = "1 turkey costs 30€";
let regexp = /\d+(?=(€|kr))/; // €|kr 两侧有额外的括号
alert( str.match(regexp) ); // 30, €  前瞻
let str = "1 turkey costs $30";
let regexp = /(?
[1]: https://xuan.ddwoo.top/index.php/archives/74/" ↩                
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档