2017-02-18 12 views
0

私はこのような要件を持っています。文字列の要素を選択して配列をプッシュ

入力文字列Please choose one \n 1. optionA \n 2. optionB \n 3. optionC

Please choose one can be any textは、その場所に任意のテキストを持つことができます。この\nからend of lineまでは、スペーシングを含む正確に同じ形式になります。 optionA,optionBおよびoptionCは動的です。

optionA,optionBおよびoptionCを配列にプッシュしたいとします。私はRegexとJavascriptで試してみましたが、成功しませんでした。どうすればいいのですか?

私はlodashとregex /\.(.*)\\/から_.wordsを使用しました。まず最初に、正規表現は単語を返さない

助けてください

+1

これまでに試したことと動作しない方法を教えてもらえますか?それから、あなたはそれを正しい方向に向けることができます – qxz

+0

正規表現は文字通りのバックスラッシュ文字を探しているようです。多分あなたは改行 '\ n'を探すことを意図していたでしょうか?番号付きのオプションのいずれかにカンマがある場合は、 – qxz

答えて

1

これをチェックしてください。 あなたの質問に書かれた書式のテキストに対してのみ動作します。
異なる文字列を使用しているかどうかにかかわらず、完全にはっきりしていないので、私はあなたにこの解決策を提供します。
その場合、コメントを残し

var str="This can be any string ending with\n 1. any_option \n 2. can_be_placed \n 3. without_space"; 
 
var opt=str.replace(/^[^\n]*\n\s?\d+.\s?/g,''); 
 
opt=opt.replace(/\s?\n\s?\d+.\s?/g,',').split(','); 
 
console.log(opt);

+0

は機能しません。 –

+0

はい。しかし、一般的にオプション値にはコンマは含まれていません@AndrewWillems –

+1

OPは "' optionA'、 'optionB'、' optionC'は動的です。カンマのような一般的な英語の句読点に遭遇する可能性があることが示唆されています。 –

0

、このいずれかを試してみてください...

var inputString = 'Please choose one\n 1. option_1 \n 2. option_2 \n 3. option_2'; 
 
var matchedList = inputString.match(/\b\w*[_]\w*\b/g); 
 
console.log(matchedList);

出力matchedList配列

Array.prototype.map()機能使用

[ "option_1"、 "option_2"、 "option_2"]

+0

ただし、アンダースコアのないオプションとは一致しません。彼はoption_1は何でもよいと言います。 –

1

ソリューション:

var s = 'Please choose one \n 1. optionA \n 2. optionB \n 3. optionC', 
 
    options = s.match(/\n \d+\. (\w+)/g).map(function(v){ 
 
     return v.trim().split(' ')[1]; 
 
    }); 
 

 
console.log(options);

1

を私はsplitを使用することをお勧めします:

var input = 'Please choose one \n 1. optionA \n 2. optionB \n 3. optionC'; 
 
var options = input.split(/\s*?\n\s*\d+\.\s*/).slice(1); 
 
console.log(options);

+0

最初の '/ s *?'は '/ s *'であるべきだと思います。 –

+1

はい、それは除外される可能性がありますが、私はそれが '?'は最初の試みで' \ n 'を含めることを試みないので、'? 'がなければ '\ s *'の' \ n'を最初に取得し、マッチ:それは逆戻りし、正しい方法でそれを行う必要があります。 – trincot

+0

正規表現の先頭にある0個以上のものの貪欲でない一致は、どのように返されますか?あなたのソリューションは '\ n'の前の空白を取り除くので、はっきりと動作します。しかし、何かのゼロがオプションで、あなたが貪欲ではないと言われたら、なぜ何かを取るのですか? –

関連する問題