2017-07-26 40 views
1

我试图组合一个RegEx来分割各种可能的用户输入,并且虽然我设法成功处理了一些情况,但我还没有管理涵盖我想要的每个案例。以不同的格式提取字符串的数字和文本部分

可能的输入,和预期产出

"1 day" > [1,"day"] 
"1day" > [1,"day"] 
"10,000 days" > [10000,"days"] 

是否有可能拆分从字符串的数字和文本部分,而不一定具有空间,并且还从串在除去逗号等同时?

This is what I've got at the moment

[a-zA-Z]+|[0-9]+ 

这似乎很好地分割数字和文字部分,而是由逗号绊倒。 (其实,当我写这个时,我想我可以使用结果数组的最后部分作为文本部分,并将所有其他部分连接为数字部分?)

+2

让我们了解您走到这一步, – Eric

+0

哈哈!很公平,这是迄今为止我发布的最懒惰的问题SO – Ted

回答

1

var test = [ 
 
    '1 day', 
 
    '1day', 
 
    '10,000 days', 
 
]; 
 
console.log(test.map(function (a) { 
 
    a = a.replace(/(\d),(\d)/g, '$1$2'); // remove the commas 
 
    return a.match(/^(\d+)\s*(.+)$/); // split in two parts 
 
}));

+0

托托,je t'aime! Merci beaucoup。 – Ted

1

这个正则表达式除了从匹配的串号删除逗号:

([0-9,]+]) *(.*) 

你不能“忽略”在返回的正则表达式匹配字符串中的字符,所以你只需要事后从返回的正则表达式匹配删除逗号。

+0

感谢CC,我没有完全理解关于正则表达式,所以很高兴知道将来的参考(并解释了为什么Toto分两步完成在他的回答中)。 – Ted