Javascript 正则表达式:动态捕获组

Javascript regex: dynamic capture group

我第一次尝试围绕正则表达式思考。

对于字符串

I want you to MATCH THIS, you bastard regex, but also MATCH X THIS and yeah,
MATCH X X X THIS too.

基本上,一个起始模式、一个结束模式以及其间的任意数量的模式。

所以我想 myregex.exec string 依次 return

["MATCH", "THIS"]
["MATCH", "X", "THIS"]
["MATCH", "X", "X", "X", "THIS"]

我试过这个的变体

/(MATCH)\s+(X)?\s+(THIS)/

但是没有雪茄...

尝试将 \s+ 放入带有 * 的可选组中:

/(MATCH)\s+(?:(X)\s)*(THIS)/g

注意 g 修饰符以获取所有匹配项。

您可以使用正则表达式来匹配整个表达式:

/MATCH\s+(?:X\s+)*THIS/g

要将其放入 terms/words 数组中,您可以像这样使用 String.split()

var out = document.getElementById( "out" );

function parse( string ){
  var re = /MATCH\s+(?:X\s+)*THIS/g;
  var matches = (string.match( re ) || [])
                  .map( function(m){ return m.split( /\s+/ ); } );
  out.innerHTML = JSON.stringify( matches );
}

parse( document.getElementById( "in" ).value );
textarea { width: 100%; }
<textarea id="in" onchange="parse( this.value )">I want you to MATCH THIS, you bad regex, but also MATCH X THIS and yeah, MATCH X X X THIS too.</textarea>
<p id="out"/>