Js的$&如同 sed的& java的$0
$& 可用于Js,Vscode,RJTextEd,editplus,notepad++,
在 Vscode,RJTextEd,editplus,notepad++,等的替换中, 启用正则, 就能使 $&
生效,
比如 ($&)
表示给匹配到的内容加上括号
$& 可用于Js的String的replace(
和replaceAll(
的第二个字符串参数中
replace(
和replaceAll(
的第二个参数可以是字符串,也可以是函数
例子:给匹配到的内容加上括号
比如给字符串"abcdaabcdefgabcaabcdefg"中符合/aa/规则的内容加括号
以下代码等效
"abcdaabcdefgabcaabcdefg".replace(/aa/g , "($&)" );
"abcdaabcdefgabcaabcdefg".replaceAll(/aa/g , "($&)" );
"abcdaabcdefgabcaabcdefg".replaceAll("aa" , "($&)" );
也可以使用函数方式
replace(/aa/g , matcher=>"("+matcher+")");
replace(/aa/g , "($&)" );
replace(/aa/g , function(matcher){return "("+matcher+")";});
replaceAll(/aa/g , matcher=>"("+matcher+")");
replaceAll("aa" , matcher=>"("+matcher+")");
replaceAll(/aa/g , "($&)" );
replaceAll("aa" , "($&)" );
replaceAll(/aa/g , function(matcher){return "("+matcher+")";});
replaceAll("aa" , function(matcher){return "("+matcher+")";});
$0 可用于Java, Notepad3 等
$0 可用于Notepad3 等的正则替换
$0 可用于Java的String的 replaceAll
方法 , Java的Matcher的replaceAll(
, appendReplacement(
等
String的replaceAll
方法源码
public String replaceAll(String regex, String replacement) {return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
Matcher的replaceAll
方法源码
public String replaceAll(String replacement) {reset();boolean result = find();if (result) {StringBuilder sb = new StringBuilder();do {appendReplacement(sb, replacement);result = find();} while (result);appendTail(sb);return sb.toString();}return text.toString();
}
例子:给匹配到的内容加上括号
比如给字符串"abcdaabcdefgabcaabcdefg"中符合/aa/规则的内容加括号
以下代码 m1,m2,m3,m4方法等效
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class C2 {public static void main(String...arguments) {m1(); m2(); m3(); m4();}static String str = "abcdaabcdefgabcaabcdefg";static void m1() {System.out.println( str.replaceAll("aa", "($0)") );}static void m2() {Matcher matcher = Pattern.compile("aa").matcher(str);System.out.println( matcher.replaceAll("($0)") );}static void m3() {Matcher matcher = Pattern.compile("aa").matcher(str);StringBuilder sb = new StringBuilder();while(matcher.find()) {matcher.appendReplacement(sb, "($0)");}matcher.appendTail(sb);System.out.println(sb);}static void m4() {Matcher matcher = Pattern.compile("aa").matcher(str);StringBuilder sb = new StringBuilder();while(matcher.find()) {String 本次匹配到的内容 = matcher.group();matcher.appendReplacement(sb, "("+本次匹配到的内容+")");}matcher.appendTail(sb);System.out.println(sb);}}
& 可用于 sed 等
例子:给匹配到的内容加上括号
比如给字符串"abcdaabcdefgabcaabcdefg"中符合/aa/规则的内容加括号
echo "abcdaabcdefgabcaabcdefg" | sed 's/aa/(&)/g'
root@ud2310vm:~# echo "abcdaabcdefgabcaabcdefg" | sed 's/aa/(&)/g'
abcd(aa)bcdefgabc(aa)bcdefg
z@ud2310vm:~$ echo "abcdaabcdefgabcaabcdefg" | sed 's/aa/(&)/g'
abcd(aa)bcdefgabc(aa)bcdefg