[英]Split string based on the first occurring number javascript
我有一个string
,我想使用.split()
函数拆分为多个块 。
字符串示例
59 Samuël 1 en 2 // Example 1
1 Saul omgekomen door het zwaard // Example 2
622 Koningen 1 tot 10 // Example 3
预期产量
['59', 'Samuël 1 en 2'] // Output example 1
['1', 'Saul omgekomen door het zwaard'] // Output example 2
['622', 'Koningen 1 tot 10'] // Output example 3
我根据其他主题中的答案尝试了以下代码。
var example_1 = '59 Samuël 1 en 2'; var example_2 = '1 Saul omgekomen door het zwaard'; var example_3 = '622 Koningen 1 tot 10'; console.log(example_1.split(/(\\d+)/)); console.log(example_2.split(/(\\d+)/)); console.log(example_3.split(/(\\d+)/));
但是输出不是预期的输出,例如。 ['59', 'Samuël 1 en 2']
有人可以指出我正确的方向吗?
正如OP在评论中所述,预期的输入为99 string
这可以在正则表达式中表示为2个捕获组。
第一个-> \\d\\d
2个数字..第二个-> .*
其他。
然后,您可以将其与捕获组结合。
因此最终的正则表达式为/(\\d\\d) (.*)/
如果数字的长度可能不是2位数字,则可能需要\\d+
。
这是99 string
的工作示例
console.log("59 Samuël 1 en 2".match(/(\\d\\d) (.*)/).slice(1));
如果数字可以是单个,甚至是3,那么可能会更好。
console.log("59 Samuël 1 en 2".match(/(\\d+) (.*)/).slice(1)); console.log("159 Samuël 1 en 2".match(/(\\d+) (.*)/).slice(1)); console.log("9 Samuël 1 en 2".match(/(\\d+) (.*)/).slice(1));
我认为使用带有“。+”的捕获组来包含之后的所有内容都应该可行。
var string = '59343 Samuël 1 en 2'; console.log(string.split(/\\d+(.+)/)[1].replace(' ', ''));
您可以使用捕获括号,然后过滤出空的匹配项
const str = '50 Samuël 1 en 2'; console.log(str.split(/(\\d+)(.+)/).filter(e => e));
只要您可以指望在第一个数字序列之后有一个空格,就可以这样做。 它不是很漂亮,但是应该很清楚,因此,如果您愿意,可以提高效率。
(请注意,按数字分割会删除数字,这并不是根据预期输出实际要查找的内容。)
var str = '59 Samuël 1 en 2';
var arr = str.split(" ");
let i = 0, firstIntPosInArr = -1;
for(; i < arr.length; i++){
if(parseInt(arr[i])){
firstIntPosInArr = i;
console.log(`${i}: ${arr[i]}`);
break;
}
}
console.log(firstIntPosInArr);
let firstPart = [], secondPart = [], output = [];
for(i = 0; i < arr.length; i++){
if(i <= firstIntPosInArr){ firstPart.push(arr[i]); }
else secondPart.push(arr[i]);
}
console.log("1:" + firstPart);
console.log("2:" + secondPart);
output.push(firstPart.join(' '));
output.push(secondPart.join(' '));
console.log(output);
如果您不希望仅使用split
,则可以将其与slice结合在一起并加入以实现所需的结果。
[
string.split(/(\d+)/)[0],
string.split(/(\d+)/).slice(1).join(' ')
]
另一种选择是使用仅与第一个数字匹配的RegExp,但这也需要与filter
结合使用,因为它会为输出数组中的第一个条目创建一个匹配项''
。
string.split(/^(\d*) /).filter(Boolean);
编辑: 最佳最终解决方案:
要使用单个RegExp进行split
并split
,可以使用以下命令:
string.split(/[^\d](.*\d*)$/, 2);
此RegExp将拆分(并捕获)从最后一位到第一位之前的整个字符串,即“Samuël1 en 2” 。 此方法仍在split
数组的末尾产生多余的空字符串,这就是为什么需要限制器的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.