Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按JS中的类型拆分长度未知的可能相邻元素的字符串_Javascript_Jquery_Arrays_String_Loops - Fatal编程技术网

Javascript 按JS中的类型拆分长度未知的可能相邻元素的字符串

Javascript 按JS中的类型拆分长度未知的可能相邻元素的字符串,javascript,jquery,arrays,string,loops,Javascript,Jquery,Arrays,String,Loops,给定一个字符串(实际上是svg路径),例如: 我想得到一个数组,其中每个元素要么是一个字母,要么是一个完整的正数,要么是负数,如下所示: [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] 我曾考虑将split()与正则表达式一起使用,但我认为这不适用于诸如“M72”之类的相邻元素,因为它们之间没有我可以用于分割的对象

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

我想得到一个数组,其中每个元素要么是一个字母,要么是一个完整的正数,要么是负数,如下所示:

[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]
我曾考虑将split()与正则表达式一起使用,但我认为这不适用于诸如“M72”之类的相邻元素,因为它们之间没有我可以用于分割的对象

唯一的解决方案是一个定制的char-per-char循环,它可以找到我正在寻找的每种类型的元素(可能是正则表达式)的beggining和end吗


谢谢

您可以使用SVG.js来实现这一点:

您使用regex的方法是正确的,但是您可以利用这样一个事实:使用
split
,模式中的任何捕获组都将与匹配两侧的字符串一起返回

类似于
/\s*([-+]?\d+\s*/g
的模式将选择任何数字并围绕这些数字拆分字符串。结果可能包含空字符串,但可以使用
filter
非常轻松地删除这些字符串

var输入=“M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405z”;
var result=input.split(/\s*([-+])?\d+\s*/g.filter(字符串);

控制台日志(结果)您可以将字母或数字与可选减号匹配。
var string=“M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405zx-12.4y0.001”,
parts=string.match(/[a-z]|-?\d+\.?\d*/gi);

控制台日志(部件)我相信这与十进制数字是分开的,如-86.5,在这个意义上-86和5是分开的。如何在正则表达式中修复?谢谢你这个答案很有效,但尼娜·斯科尔斯的答案在我看来更简洁。不需要.filter(),没问题。我很高兴你能找到解决办法。FWIW,如果您只想解析有效的SVG路径,Piort Szlagura的解决方案实际上更正确。感谢@p-s-w-g的提示,我很可能会在node.js中这样做,所以我想避免使用库,特别是像SVG.js这样复杂的库,但我明白您的观点
[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]