我有这个简单的字符串:
"a1a2a3"
是否有可以使用的正则表达式 split 命令所以它会将字符串拆分成一对? :
["a1","a2","a3"] ?
我试过这个:
"a1a2a3".split(/(?=..)/)
但它回来了 ["a", "1", "a", "2", "a3"]
附:
我可以做到 Match 但我正在寻找(如果存在)正则表达式,它可以帮助我使用 split。
我有这个简单的字符串:
"a1a2a3"
是否有可以使用的正则表达式 split 命令所以它会将字符串拆分成一对? :
["a1","a2","a3"] ?
我试过这个:
"a1a2a3".split(/(?=..)/)
但它回来了 ["a", "1", "a", "2", "a3"]
附:
我可以做到 Match 但我正在寻找(如果存在)正则表达式,它可以帮助我使用 split。
split 对于偶数长度字符串:
str.split(/(?=(?:..)*$)/)
split 对于奇数长度字符串,最后一个条目具有单个字符:
str.split(/(?=(?:..)*.$)/)
这些基本上是前瞻,检查前面的字符数是奇数还是偶数。它利用了以下事实:在所有分割位置前面的字符数具有与字符串长度相同的奇偶校验。
(偶数版)前瞻的模式是 (?:..)*$,检查偶数个字符 (?:..)* 在字符串结束之前 $。 (注意非捕获组 (?:pattern) 在这里使用,否则,捕获组将在中创建额外的条目 split 结果)。类似的解释适用于奇数版本。
注意 . 排除了几个新的行字符: \n, \r, \u2028 要么 \u2029。它会对包含这些字符的字符串产生意外的结果。更换 . 同 [\s\S] (或其他等效构造)使其适用于所有情况。
出于实用目的, match 是这项工作的正确工具:
str.match(/..?/g)
例如:
"1234567890".match(/..?/g)
> [ "12", "34", "56", "78", "90" ]
"1234567890".match(/..?/g)
> [ "12", "34", "56", "78", "9" ]
该解决方案可以扩展为n个字符组:
str.match(/.{1,<n>}/g)
例如:
"123456789012345678901234567890".match(/.{1,7}/g)
> [ "1234567", "8901234", "5678901", "2345678", "90" ]
它只是利用了贪婪的量词并创建了n个字符组,然后用完了最后一组的字符。
与上面相同,您可能想要更改 . 至 [\s\S] 使其适用于所有情况。
我已经在聊天中回答了这个问题你真的应该使用 String.prototype.match。
可以用拆分完成吗?从技术上讲,是的。你可以拆分它 /(..)/ 然后过滤掉空白字符串。
"a1a2a3".split(/(..)/).filter(function(a){
return a !== '';
});
我不确定输入字符串的所有可能格式是什么,但我认为它是一些字母后跟一些数字。
如果是这样,你可以尝试:
var str = 'abc123d56efg8t5'
var res = str.split(/([a-z]+[0-9]+)/).filter(Boolean);
输出:
["abc123", "d56", "efg8", "t5"]