如何拆分包含多个符号的字符串

时间:2018-01-18 19:06:19

标签: javascript arrays regex string split

所以我有一个由多个项组成的字符串,并用“+”或“ - ”分隔。该字符串包含5个元素:typeCode,versionCode,lengthCode,partCode,最后一部分是数据。每种类型的长度都需要是可变的,因此typeCode的长度可以为2,但也可以是5的长度。总字符串的最大长度为30个字符,但根据长度的不同,它可能会更短。最后的数据。当每个部分的长度固定时,我能够将它分开(2是我曾经使用过的),但我希望它灵活而不是硬编码。

我想将每个字符串拆分为5个元素作为数组。每个元素的分隔符是“+”或“ - ”,如示例中所示。我不希望分隔符包含在任何元素中。在第一个元素之前或最后一个元素之后没有拆分字符。

我还希望能够确定最后一个分隔符是“+”还是“ - ”,并将其作为数组中的元素。

我相信这可以通过使用String.split(separator)的RegEx来完成,其中 separator 是javascript中的字符串或RegEx,但我不确定。我不知道RegEx。

输入和所需输出的示例:

  

01 + 03 + 03 + 00-3f2aec1f6b088a1c

     

= [“01”,“03”,“03”,“00”,“ - ”,“3f2aec1f6b088a1c”]

     

01 + 03 + 03 + 01 + acaa4ece96da0e31

     

= [“01”,“03”,“03”,“01”,“+”,“acaa4ece96da0e31”'

     

011 + 031 + 03 + 01 + acaa4ece96da0e31

     

= [“011”,“031”,“03”,“01”,“+”,“acaa4ece96da0e31”

2 个答案:

答案 0 :(得分:4)

Label1 Input1 Checkbox1 Label2 Input2 Checkbox2 完全符合您的要求。

从Javascript控制台:

/[+-]/g

要查找最后一个分隔符,可以从输入字符串中选择它:

"01+03+03+00-3f2aec1f6b088a1c".split(/[+-]/g)
> (5) ["01", "03", "03", "00", "3f2aec1f6b088a1c"]

或者您可以使用正则表达式,@ Jeffrey Westerkamp在评论中建议

data = "01+03+03+00-3f2aec1f6b088a1c";
chunks = data.split(/[+-]/g);

lastDelimiter = data.charAt(data.length - chunks[chunks.length - 1].length - 1)

答案 1 :(得分:0)

捕获最后一个分隔符的其他可能性:

"01+03+03+00-3f2aec1f6b088a1c".split(/[+-](?!\w+$)|([+-])/).filter(i=>i!==undefined)

或更严格:

(?!\w+$)

这个想法包括对所有不是最后一个分隔符的分隔符使用第一个分支(使用负向前瞻old-id进行测试),并使用第二个分支和最后一个分隔符的捕获组。由于未为最后一个定义的所有分隔符定义捕获组,因此需要过滤结果数组中的所有未定义项。