使用javascript从字符串中提取字符串作为数组

时间:2019-01-22 07:58:43

标签: javascript regex

我有一个字符串

make -j128

我需要从该字符串中提取 -j128

现在为什么我需要字符串数组作为输出,所以我会遇到这样的情况

repo sync -j32 && make -j128

在这种情况下,我需要获取 -j32 -j128

因此,第一种情况的输出为 [-j128] ,第二种情况的输出为 [-j32,-j128]

我想要的最终结果是没有-j的数字,即 [128] [32,128] ,我可以通过删除前面的-j来处理。如果你们认为为什么我不能在开头就提取数字。这是有原因的,因为字符串也可以像这样

repo blah blah 123 blah -j32 blah 3 blah 

我只需要以 -j

开头的 32

即使在大量使用Google谷歌搜索之后,我也无法找到解决方案,这可能是因为不是那么在regex中使用,感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是使用String.prototype.match()的简单解决方案:

const s = 'repo sync -j32 && make -j128';
const re = /-j\d+/g

const result1 = s.match(re);
const result2 = result1.map(x => +x.replace(/\D/g, ''));

console.log(result1);
console.log(result2);

在这里

  • result1将是一个以-j开头的所有子字符串的数组,后跟任意数量的数字。
  • result2是一个数组,其中删除了所有非数字,并将值转换为数字。

答案 1 :(得分:1)

您可以使用以下正则表达式来匹配所有前缀为-j的数字:

/-j(\d+)/g

然后使用.exec获取所有匹配的组并将它们放入数组。

请参见下面的工作示例:

const str = "repo sync -j32 && make -j128";
let nums = [];
let regex = /-j(\d+)/g;
while(match = regex.exec(str)) {
  nums.push(+match[1]);
}
console.log(nums);