在正则表达式中,通过使用括号将某个子字符串匹配成一个组,从而在匹配结果中获取该组的值。而通过$1~$9属性,可以返回匹配文本的子匹配内容。以下是详细解释:
$1, $2, $3, $4, $5, $6, $7, $8, $9属性
这些属性用于获取子匹配到的字符串,其对应的匹配组由圆括号指定。例如:
const regex = /^(\d{4})-(\d{2})-(\d{2})$/;
const dateString = '2021-01-28';
const matchResult = regex.exec(dateString);
console.log(matchResult[1]);
console.log(matchResult[2]);
console.log(matchResult[3]);
以上代码中,当匹配字符串2021-01-28
的时候,正则表达式/^(\d{4})-(\d{2})-(\d{2})$/
将字符串分为3个匹配组:(\d{4})
、(\d{2})
和(\d{2})
,分别代表年、月、日的数字部分。通过matchResult[1]
、matchResult[2]
、matchResult[3]
可以获取到匹配结果的年、月、日部分的文本。
如果正则表达式中有多个括号,则可以通过$1
、$2
、$3
等属性获取到对应的子匹配文本。例如:
const regex = /([A-Z]\w+)\s([A-Z]\w+)/;
const name = 'Steve Jobs';
const matchResult = regex.exec(name);
console.log(matchResult[1]);
console.log(matchResult[2]);
console.log(`Hello, ${matchResult[1]} ${matchResult[2]}!`);
以上代码中,正则表达式 /([A-Z]\w+)\s([A-Z]\w+)/
表示匹配一个带空格的两个子字符串列表达式。正则表达式包含两个括号分组,第一个括号分组匹配以大写字母开头的单词,第二个括号分组匹配在第一个分组后的一个空格。
在执行上述代码后,控制台将打印以下结果:
Steve
Jobs
Hello, Steve Jobs!
这里$1
对应Steve
,$2
对应Jobs
。
总结
使用$1
、$2
、$3
等属性可以很方便地访问正则表达式的子匹配文本。但是如果使用这些属性访问一个没有匹配的文本,则将会返回undefined
。此外,如果正则表达式存在很多括号分组,那么建议使用具有更好可读性和可维护性的变量名,而不是使用$1
、$2
等直接的属性名称。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js正则表达式之$1$2$3$4$5$6$7$8$9属性,返回子匹配的结果 - Python技术站