接从字符串元素和推在阵列

问题描述:

我有这样的要求。接从字符串元素和推在阵列

输入字符串Please choose one \n 1. optionA \n 2. optionB \n 3. optionC

Please choose one can be any text可以在其发生的任何文字。从这\n直到end of line将具有完全相同的格式,包括间距。该optionAoptionBoptionC是动态的。

我想推optionAoptionBoptionC到一个数组中。我一直在试用正则表达式和Javascript,但没有成功。我该怎么做?

我以前_.words从lodash和正则表达式/\.(.*)\\/。首先正则表达式不返回这个词

帮我出来

+1

,你能否告诉我们到目前为止你已经尝试过什么,以及它是如何不工作?然后我们可以引导你正确的方向来修复它 – qxz

+0

你的正则表达式似乎在寻找一个字面反斜杠字符;也许你打算寻找新行'\ n'? – qxz

检查一下。 它只适用于您在问题中提及的格式文本。
由于它不是完全清楚是否要使用不同的字符串或没有,我给你这个解决方案。
如果你这样做,发表评论

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'是动态的。”这表明我可能会遇到像逗号一样的普通英文标点符号。 –

试试这个...

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阵列

[ “option_1”, “option_2”, “option_2”]

+0

但它不会匹配没有下划线的选项。他说option_1可以是任何东西。 –

将溶液使用Array.prototype.match()Array.prototype.map()功能:

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);

我建议使用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

如何在正则表达式开始处的任何零或零个以上的非贪婪匹配返回任何东西?这很明显,因为你的解决方案消除了'\ n'之前的空格。但是,如果某件事是零,而你被告知不贪婪,你为什么要拿什么? –