Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取许多子字符串并将它们放入JavaScript中的数组中_Javascript_Arrays_Regex - Fatal编程技术网

提取许多子字符串并将它们放入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 |$
        ,它表示任何空白字符或行尾

    非常感谢。它对我来说非常有用。此外,感谢你为我指出了学习正则表达式的巨大资源。我只是想知道,你需要多长时间才能掌握正则表达式?:)好吧,因为我不是真的掌握它-我不知道。但是使用这些工具和一些阅读,你很快就能走得很远。如果你被卡住的话,仍然会有这样的情况;)谢谢你的帮助。当我有时间的时候,我会试试你的方法。祝您有个美好的一天。这里有这么多了不起的人。:)