按类型在JS未知长度的可能的相邻元件的分割字符串

问题描述 投票:1回答:3

给定一个字符串(实际上是一个SVG路径),如:

"M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405z"

我想,其中每个元素可以是一个字母,无论是全正数或负数,像这样得到的数组:

[M, 72, 0, v, 754, h, 405, v, -86, h, -311, v, -211, h, 302, v, -86, h, -302, v, -285, h, 311, v, -86, h, -405, z]

我想过使用与正则表达式分裂(),但我相信因为他们之间有什么,我可以针对分裂,不会与相邻的元素,如“M72”的工作。

是唯一的解决办法每个字符循环,发现元素的每种类型的我期待的,可能与正则表达式的开头和结尾的自定义字符?

谢谢

javascript jquery arrays string loops
3个回答
1
投票

你可以匹配任何一个字母或一个可选的减号的数字。

var string = "M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405zx-12.4y0.001",
    parts = string.match(/[a-z]|-?\d+\.?\d*/gi);
    
console.log(parts);

1
投票

你可以使用SVG.js来实现这一目标:https://svgjs.com/docs/2.7/classes/#svg-patharray


1
投票

你在正确的轨道上正则表达式,但你可以采取的事实与split,在任何模式捕获组将会对本场比赛的两边串一起返回优势。

/\s*([-+]?\d+)\s*/g的模式将选择任何号码和分裂围绕这些数字的字符串。结果可能包含空字符串,而是那些能与filter很容易地被移除。

var input = "M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405z";
var result = input.split(/\s*([-+]?\d+)\s*/g).filter(String);
console.log(result);
© www.soinside.com 2019 - 2024. All rights reserved.