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"/>
我第一次尝试围绕正则表达式思考。
对于字符串
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"/>