JavaScript中字符串的split方法大家经常用吧?例如将逗号分隔的字符串分解为数组:
"a,b,c".split(","); // ["a", "b", "c"]
split可以按正则表达式进行分解估计很多人也知道,常见的就是多浏览器通用的分解多行文本:
"a\nb\r\nc\rd".split(/\r?\n/); // 通吃IE和Opera的\r\n,以及FF、Chrome、Safari的\n
今天在写MAC字串处理的时候也用到了它,要处理的格式有4种:
01-23-45-67-89-ab
01:23:45:67:89:ab
0x0123456789ab
0123456789ab
前两种分解很容易:
"01-23-45-67-89-ab".split(/-|:/);
而对于后面的2种格式,突然也想用split进行拆分,该如何进行呢?来慢慢尝试
// 先试试2个2个匹配
"0123456789ab".split(/../); // ["", "", "", "", "", "", ""]
// 嗯。。。有问题,需要保留匹配项,加上括号分组
"0123456789ab".split(/(..)/);// ["", "01", "", "23", "", "45", "", "67", "", "89", "", "ab", ""]
// 前后的空字串也被分解了,看来不能从头开始匹配,用前置预匹配
"0123456789ab".split(/(?<=(?:..)(..))/); // SyntaxError: Invalid regular expression: /(?<=(?:..)(..))/: Invalid group
// 呃。。看来不支持前置预匹配,换后置的
"0123456789ab".split(/(?=(?:..)+)$/); // ["0123456789ab"]
// 嗯?完全没分解,哦,结束符被匹配上了,把它放到预匹配中去
"0123456789ab".split(/(?=(?:..)+$)/); // ["01", "23", "45", "67", "89", "ab"]
// :) 大功告成!
可以简单改造,使它支持其它数目分隔,例如IPv6的4位分隔:
"200100004136e378800063bf3ffffdd2".split(/(?=(?:.{4})+$)/);
// ["2001", "0000", "4136", "e378", "8000", "63bf", "3fff", "fdd2"]
但现在有个问题,它是以字符串结尾进行对齐的,所以会出现这种情况:
"200100004136e378800063bf3ffffd".split(/(?=(?:.{4})+$)/);
// ["20", "0100", "0041", "36e3", "7880", "0063", "bf3f", "fffd"]
有没有这样一个JS下的正则,可以实现与头对齐的拆分呢?
"200100004136e378800063bf3ffffd".split(__?__);
// ["2001", "0000", "4136", "e378", "8000", "63bf", "3fff", "fd"]
想不出来了,有解么?
P.S. 此拆分方法并不推荐使用,对于平整的拆分,它的性能明显不如按位循环。仅供蛋疼的时候玩……
分享到:
相关推荐
如果不可用,请调用其“ shim”方法对String.prototype.padStart进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 最常见的用法: var padStart = require ( 'string.prototype.padstart' ...
如果不可用或不String.prototype.replaceAll调用其“ shim”方法对String.prototype.replaceAll进行填充。 该软件包实现了接口。 它在ES3支持的环境中工作,并符合。 最常见的用法: const assert = require ( '...
如果不可用,则调用其“ shim”方法对String.prototype.trimEnd进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 在ES6环境中,它也可以与Symbol一起正常使用。 最常见的用法: var ...
如果不可用或不String.prototype.matchAll则调用其“ shim”方法对String.prototype.matchAll进行填充。 该软件包实现了接口。 它在ES3支持的环境中工作,并符合。 最常见的用法: const assert = require ( '...
如果不可用,请调用其“ shim”方法对String.prototype.trim进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作,并符合规范( 和 )。 最常见的用法: var assert = require ( 'assert' ) ; var ...
如果不可用,则调用其“ shim”方法对String.prototype.padEnd进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 最常见的用法: var padEnd = require ( 'string.prototype.padend' ) ;assert...
1、题外话,有关概念理解:String.prototype 属性表示 String原型对象。所有 String 的实例都继承自 String.prototype. 任何String.prototype上的改变都会影响到所有的 String 实例。 2、上正文,js扩展String....
柯里化的String.prototype.split支持按字符串、正则表达式或函数进行拆分。 npm install string-split --save npm 统计信息 例子 要求 var split = require ( 'string-split' ) ; 完整的应用程序 split ( "." , ...
根据给定文件中的代码示例,我们可以看到作者通过扩展`String.prototype`,实现了三种不同的字符串修剪方法:`Trim()`, `LTrim()`, 和 `Rtrim()`。下面将详细解析这些方法的实现原理及使用场景。 ### 1. `String....
如果不可用,请调用其“ shim”方法对String.prototype.trimStart进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 在ES6环境中,它也可以与Symbol一起正常使用。 最常见的用法: var ...
ES6 String.prototype.repeat polyfill 用于健壮且优化 。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 还可以使用String.prototype.repeat其他polyfills: ( 现在通过所有测试) 安装 通过 : ...
String.prototype.codePoints 针对String.prototype.codePoints的ECMAScript建议 地位 该提案处于第一阶段。 动机 对于包含高于0xFFFF的代码点的语言(例如ECMAScript语法本身),词法分析器需要能够在使用自己的...
String.Prototype.trim() trim()返回一个字符串两端空白字符被删除的新字符串,不影响原字符串。 第一种实现方式:理论上算是比较不错的 if (!String.prototype.trim) { String.prototype.trim = function () { ...
`String.split()`方法是Java开发者工具箱中不可或缺的一部分,它不仅提供了基本的字符串分割功能,还支持复杂的正则表达式,使得数据解析变得更加灵活和强大。然而,正如任何强大的工具一样,理解和掌握其背后的原理...
如果不可用,则调用其“ shim”方法对String.prototype.trimLeft进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 在ES6环境中,它也可以与Symbol一起正常使用。 最常见的用法: var ...
如果不可用,请调用其“ shim”方法对String.prototype.trimRight进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 在ES6环境中,它也可以与Symbol一起正常使用。 最常见的用法: var ...
几年后,即2020年11月,添加了具有不同语义的String.prototype.at 。 请改用 。 串连 的健壮且经过优化的ES3兼容polyfill。 这段代码几乎完全是从@mathiasbynens出色的polyfill复制的,为我创建了该代码,以便它...
该方法通过扩展 String.prototype.pad 方法,使得字符串对象可以调用 padLeft 和 padRight 方法,以达到补位的效果。 其他网友的补充 另有网友提供了一个 JavaScript-leftpad 方法的实现,该方法是通过循环挨个...
`String.prototype.trimStart()`方法是ES2019引入的一个新特性,专门用于移除字符串开头的空白字符,如空格、制表符、换行符等。这个方法在处理用户输入或者格式化文本时非常有用,能确保我们得到的字符串是从有意义...
通常,这类问题的解决方法可能包括更新项目依赖、修复项目配置、重装全局npm包或者使用特定的命令来解决特定问题。 综上所述,解决“Error: Cannot find module”错误需要细心排查各个可能的原因,从模块导入路径、...