在我的浏览器console.log(来自服务器的socket.io应答的结果)中,我有这个字符串需要在数组中进行转换:
'test.tif[0] TIFF 1962x2668+0+0 DirectClass 1-bit 12.8M 0.000u 0:01
test.tif[1] TIFF 1952x2688+0+0 DirectClass 1-bit 12.8M 0.000u 0:01
test.tif[2] TIFF 1650x2200+0+0 DirectClass 1-bit 12.8M 0.000u 0:01
test.tif[3] TIFF 1654x2204+0+0 DirectClass 1-bit 12.8M 0.000u 0:01
test.tif[4] TIFF 1654x2206+0+0 DirectClass 1-bit 12.8M 0.000u 0:01
test.tif[5] TIFF 1654x2206+0+0 DirectClass 1-bit 12.8M 0.000u 0:01
'
之后data.split(/(\r\n|\n|\r)/gm);
console.log 向我展示了这一点:
test.tif[0] TIFF 1962x2668+0+0 DirectClass 1-bit 12.8M 0.000u 0:01,
,test.tif[1] TIFF 1952x2688+0+0 DirectClass 1-bit 12.8M 0.000u 0:01,
,test.tif[2] TIFF 1650x2200+0+0 DirectClass 1-bit 12.8M 0.000u 0:01,
,test.tif[3] TIFF 1654x2204+0+0 DirectClass 1-bit 12.8M 0.000u 0:01,
,test.tif[4] TIFF 1654x2206+0+0 DirectClass 1-bit 12.8M 0.000u 0:01,
,test.tif[5] TIFF 1654x2206+0+0 DirectClass 1-bit 12.8M 0.000u 0:01,
,
......多了一个逗号。
当我执行data.length
时,我得到的结果是99。
这怎么可能?获得正确值的最佳解决方案是什么?
最佳答案
- 通过在 JavaScript 中使用组,您可以将匹配的组作为项目包含在拆分结果中。因此,如果您使用像
(,)
这样的正则表达式来拆分A,B
,结果将是[0] = 'A', [1] = ' ,', [2] = 'B'
。 - 您可以使用前视功能来确保每个元素后面都有文本,这样就不会包含任何空白元素。
正则表达式
(?:[\r\n]+\s*)+(?=\w)
REY
上述正则表达式的优点是可以 trim 任何额外的空格,这在您的情况下可能有点过分了。另外 [\r\n]+
可能被认为比 \r\n|\n|\r
更有效,因为它也会捕获多个连续的中断行作为最初的预期匹配。
关于javascript - 将字符串转换为数组后,我得到错误的数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22438329/