我有一个字符串
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中使用,感谢您的帮助。
答案 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);