1.3 KiB
1.3 KiB
title | localeTitle |
---|---|
Reuse Patterns Using Capture Groups | 使用捕获组重用模式 |
使用Capture Group重用模式
提示1:
给出以下代码:
let testString = "test test test ";
let reRegex =/(test)\s\1/;
let result = reRegex.test(testString);
result
将仅匹配test test
因为此示例中的\1
代表与最近匹配的第一个捕获组(test)
相同的文本。
如果我们要正面翻译正则表达式,它看起来像这样:
let re = /(test)\s\1;
let literalRe = /test\stest;
rea
和literalRe
都会匹配相同的东西。
提示2:
鉴于以下代码:
let testString = "test test test ";
let reRegex =/(test)(\s)\1\2\1/;
let result = reRegex.test(testString);
将匹配整个test test test
因为: \1
重复(测试) \2
重复(\ s)
提示3:
代码如下:
let testString = "test test test test test test";
let reRegex =/(test)(\s)\1\2\1/g;
let result = reRegex.test(testString);
因为我们使用了\g
,我们的正则表达式在第一次完全匹配( test test test
)之后没有返回并匹配所有重复。
剧透警报 - 提前解决!
解:
let repeatNum = "42 42 42";
let reRegex = /^(\d+)\s\1\s\1$/;
let result = reRegex.test(repeatNum);