提取许多子字符串并将它们放入JavaScript中的数组中
我有一个像这样的:提取许多子字符串并将它们放入JavaScript中的数组中,javascript,arrays,regex,Javascript,Arrays,Regex,我有一个像这样的: “1x 20GP 1x 40GP 1x 40HQ 5x 45HQ 2x 20RF 5x 40RQ” 现在我想把20GP,40GP,40HQ,45HQ,20RF,40RQ的部分切割成一个阵列。但是,我的字符串可以根据用户输入的值进行更改 通常,如果20GP、40GP、40HQ、45HQ、20RF和40RQ出现在字符串中,我希望将它们提取到一个数组中 我想知道做这件事最好的方法是什么。我只是在学习JavaScript,我首先想到的一个解决方案是使用正则表达式,但我不知道从哪里开始
“1x 20GP 1x 40GP 1x 40HQ 5x 45HQ 2x 20RF 5x 40RQ”
现在我想把20GP,40GP,40HQ,45HQ,20RF,40RQ的部分切割成一个阵列。但是,我的字符串可以根据用户输入的值进行更改
通常,如果20GP、40GP、40HQ、45HQ、20RF和40RQ出现在字符串中,我希望将它们提取到一个数组中
我想知道做这件事最好的方法是什么。我只是在学习JavaScript,我首先想到的一个解决方案是使用正则表达式,但我不知道从哪里开始。有人能在这里给我点化一下吗?是的,使用RegEx可以很容易地实现这一点:
var txt = "1x 20GP 1x 40GP 1x 40HQ 5x 45HQ 2x 20RF 5x 40RQ"
var matches = txt.match(/\d+[A-Z]{2}/g); // delivers ["20GP", "40GP", "40HQ", "45HQ", "20RF", "40RQ"]
这个表达的基本意思是:
\d+
至少一位数字[A-Z]{2}
后跟两个大写字母我还推荐Lea Verou的Talk/Reg(exp){2}lained/:解除正则表达式的神秘性作为您的基本输入,nozzleman提出的正则表达式将起作用。 但是,如果您想要更健壮的东西,可以尝试以下正则表达式:
txt.match(/\dx\s(.*?(?=\s|$))/g);
这将从格式如下的字符串中提取数据:
[Number]x [data1] [Number]x [data2] ....
此解决方案的优点是我们不对数据施加任何格式限制。它可以超过3个字符,并且数据可以用制表符或换行符分隔,而不仅仅是空格
正则表达式的解释:
:匹配字母\dx
x
:匹配任何空白字符(空格、制表符等)\s
:创建包含匹配文本的捕获组(.*(?=\s |$)
:*?
形成我们的模式<代码>*捕获任何字符串?
:(?=\s |$)
是。它允许我们假设模式将存在而不捕获它。在这里,我们查找模式(?=
,它表示任何空白字符或行尾\s |$