`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/" ↩