正则表达式中的$1$2在替换操作中的使用
Posted 二木成林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式中的$1$2在替换操作中的使用相关的知识,希望对你有一定的参考价值。
$1
、$2
表达的是正则表达式中小括号(即分组)中的内容,$1
是第一个小括号(分组)中的匹配结果,$2
是第二个小括号(分组)中的匹配结果,以此类推。通常$1
、$2
用在替换操作中。如下:
其中文本是123-456-789
,而正则表达式是(\\d+)-(\\d+)-(\\d+)
,可以看到正则表达式中有3对小括号(即分组),第一个分组匹配的是123
,第二个分组匹配的是456
,第三个分组匹配的是789
,而在替换区中的$3-$1-$2
中的$1
就是第一个分组中的内容123
、$2
是第二个分组中内容456
、$3
是第三个分组内容789
,能够直接引用分组中的内容,所以能够替换成功。
再看一个例子,将markdown格式的超链接替换成html格式的超链接,如下:
$1
、$2
是用在替换操作中,在实现了正则表达式的编程语言中都可以使用。例如Java:
第一个例子的代码:
public class Demo {
public static void main(String[] args) {
String regex = "(\\\\d+)-(\\\\d+)-(\\\\d+)";
String str = "123-456-789";
Matcher matcher = Pattern.compile(regex).matcher(str);
String replaceResult = matcher.replaceAll("$3-$1-$2");
System.out.println(replaceResult);// 789-123-456
}
}
第二个例子的代码:
public class Demo {
public static void main(String[] args) {
String regex = "\\\\[(.*?)\\\\]\\\\((.*?)\\\\)";
String str = "百度的超链接是:[百度](http://www.baidu.com),这是markdown格式的文本。";
Matcher matcher = Pattern.compile(regex).matcher(str);
String replaceResult = matcher.replaceAll("<a href=\\"$2\\">$1</a>");// 替换的匹配到的文本
System.out.println(replaceResult);// 百度的超链接是:<a href="http://www.baidu.com">百度</a>,这是markdown格式的文本。
}
}
例如javascript:
第一个例子的代码:
var regex = /(\\d+)-(\\d+)-(\\d+)/g;
var str = "123-456-789";
var result = str.replace(regex, "$3-$1-$2");
console.log(result);// 789-123-456
第二个例子的代码:
var regex = /\\[(.*?)\\]\\((.*?)\\)/g;
var str = "百度的超链接是:[百度](http://www.baidu.com),这是markdown格式的文本。";
var result = str.replace(regex, '<a href="$2">$1</a>');
console.log(result);// 百度的超链接是:<a href="http://www.baidu.com">百度</a>,这是markdown格式的文本。
以上是关于正则表达式中的$1$2在替换操作中的使用的主要内容,如果未能解决你的问题,请参考以下文章