2016-08-28 16 views
0

私はRegexの専門家ではありません。この文字列から2文字間のすべての文字列の配列を取得する(正規表現+ JavaScript)

["[1+5]", "1+5", "[2*[1+1]+5]", "2*[1+1]+5", "[1+1]", "1+1"] 

:この配列を作成します

"blalbla[1+5] blabla [2*[1+1]+5] blalbla" 

は、私がテストしている方法の多くは、私がやったきたものをテストするためにここで頭痛... リンクを持っている:https://jsfiddle.net/a47e60pd/1/

ありがとうたくさん:)

+0

任意のレベルのネストされた角括弧がある場合、正規表現を使用することはできません。 JS正規表現は再帰をサポートしていません。あるいは、 '' XRegExp.matchRecursive'(http://xregexp.com/api/#matchRecursive)を使うこともできます。 –

+0

この練習のポイントは何ですか?あなたはそれらを評価するつもりですか? '1 + 1'を' 2'に置き換えますか? – georg

+0

@WiktorStribiżewこの度は情報をありがとうございました。 – Saad

答えて

2

正規表現は使用しないでください。ちょうどループを使用してください。

function* parse(str) { 
 
    var indices = []; 
 
    for(var i=0; i<str.length; ++i) { 
 
    if(str[i] === '[') { 
 
     indices.push(i); 
 
    } else if(str[i] === ']') { 
 
     let idx = indices.pop(); 
 
     yield str.slice(idx+1, i); 
 
     yield str.slice(idx, i+1); 
 
    } 
 
    } 
 
} 
 
console.log([...parse("blalbla[1+5] blabla [2*[1+1]+5] blalbla")]);

+0

ありがとうございました。解決されました。 – Saad

+0

注意してくださいhttp://caniuse.com/#search=function* – lordyoum

0

このようなきれいな正規表現で可能です:

/\[[^[]+\]|\[.+?\]([^[])+\]/g 

説明: グループ1:\[[^[]+\]他の括弧なしで起動と終了ブラケットを見つけます。

それとも| グループ2:

\[.+?\]仕上げブラケットまで、ブラケットの開始を見つけ、そして([^[])+\]は "[" 最後まで "]" ではないすべての文字を見つける続ける

var ExpToReturn; 
 

 
var text = "blalbla[1+5] blabla [2*[1+1]+5] blalbla"; 
 

 
var str = text.match(/\[[^[]+\]|\[.+?\]([^[])+\]/g); 
 

 
ExpToReturn = (str); 
 

 
alert (ExpToReturn);

+0

あなたの方法も良いです。しかし、オリオールの方法が好きです。あなたの有益な答えをありがとう – Saad

関連する問題