从“一个落后”到“一个之前”(之间)

时间:2015-06-23 21:47:39

标签: javascript regex

在下面的字符串中,我想找到例如'['和'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',我想要的。一个模式怎么样,哪个匹配 两个任何所需的标志

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式:

/\[(\w+)(?=A)/g

并抓住被捕获的组#1

RegEx Demo

如果可以有多个单词字符,请使用:

/\[([^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 );