2

我第一次尝试将注意力集中在正则表达式上。

对于字符串

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连续返回

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

我试过这个的变体

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

但没有雪茄...

4

2 回答 2

2

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

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

要将其放入术语/单词数组中,您可以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"/>

于 2015-07-15T08:47:38.273 回答
1

尝试将\s+放入可选组*

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

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

于 2015-07-15T08:28:47.520 回答