在下面的字符串中,我想找到例如'['和'A'之间的所有内容。 这里'match1','match2','match3'。而不是用“检查”替换每场比赛。
var str = "+dkdele*[match1Ayesses ss [match2Aevey[match3A";
var pattern = /(?=\[)(.*?)([]?A)/g; // includes '[' and 'A'
var res = str.replace(pattern, "check"); // could be '[checkA'
console.log(res);
该模式包括'['和'A',我不想要的。一个模式怎么样,哪个匹配 两个任何所需的标志?
答案 0 :(得分:3)
您可以使用此正则表达式:
/\[(\w+)(?=A)/g
并抓住被捕获的组#1
如果可以有多个单词字符,请使用:
/\[([^A]+)(?=A)/g
<强>代码:强>
var re = /\[([^A]+)(?=A)/g;
var str = '+dkdele*[match1Ayesses ss [match2Aevey[match3A';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex)
re.lastIndex++;
console.log(m[1]);
}
<强>输出:强>
match1
match2
match3
编辑:根据以下编辑过的问题和评论:
如需更换,您可以使用:
var repl = str.replace(/(\[)[^A]+(?=A)/, '$1check');
//=> +dkdele*[checkAyesses ss [checkAevey[checkA
PS:如果您还想要替换A
,请使用:
var repl = str.replace(/(\[)[^A]+A/, '$1check');
//=> +dkdele*[checkyesses ss [checkevey[check
答案 1 :(得分:1)
您可以使用:
var pattern = /(\[).*?(A)/g;
var replacement = "check";
var res = str.replace( pattern, '$1' + replacement + '$2' );
正则表达式为:
(\[)
- 匹配一个空方括号并在第一组中捕获匹配。.*?
- 匹配任何字符的零或多或少的最小值(A)
- 然后匹配A
并在第二组中捕获它。替换将放入第一个和第二个捕获组,而不是$1
和$2
(分别)。
您可以执行任何开始和结束匹配:
var start = "\\[";
var end = "A";
var pattern = new RegExp( "(" + start + ").*?(" + end + ")", "g" );
var replacement = "check";
var res = str.replace( pattern, '$1' + replacement + '$2' );
如果您不想包含起始和结束匹配字符,则不要在替换中包含捕获组:
var res = str.replace( pattern, replacement );