我有一个字符串,看起来像这样:
a[abcdefghi,2,3,jklmnopqr]
开头的“a
”是固定不变的,但是括号内的内容是并且可以遵循某种模式。它始终是一个字母字符串,可能后跟以逗号分隔的数字或更多字符串和/或数字。
我希望能够将它分解成字符串 block 和它后面的任何数字,直到遇到“]
”或另一个字符串。
可能最好通过示例和预期的理想结果进行解释:
a[abcdefghi] -> "abcdefghi"
a[abcdefghi,2] -> "abcdefghi,2"
a[abcdefghi,2,3,jklmnopqr] -> "abcdefghi,2,3" and "jklmnopqr"
a[abcdefghi,2,3,jklmnopqr,stuvwxyz] -> "abcdefghi,2,3" and "jklmnopqr" and "stuvwxyz"
a[abcdefghi,2,3,jklmnopqr,1,9,stuvwxyz] -> "abcdefghi,2,3" and "jklmnopqr,1,9" and "stuvwxyz"
a[abcdefghi,1,jklmnopqr,2,stuvwxyz,3,4] -> "abcdefghi,1" and "jklmnopqr,2" and "stuvwxyz,3,4"
理想情况下,格式错误的字符串会被部分捕获(但这是一个很好的额外):
a[2,3,jklmnopqr,1,9,stuvwxyz] -> "jklmnopqr,1,9" and "stuvwxyz"
我使用的是 Javascript,我意识到正则表达式不会让我一路找到我想要的解决方案,但它可能会有很大的帮助。另一种方法是进行大量手动字符串解析,我可以这样做,但似乎不是最佳答案。
建议、提示表示赞赏。
更新:是的,我的意思是字母 (A-Za-z) 而不是字母数字。编辑以反射(reflect)这一点。谢谢你告诉我。
最佳答案
您可能希望分两步完成此操作。首先,匹配:
a\[([^[\]]*)\]
并提取第 1 组。这就是方括号中的内容。
接下来,重复匹配:
[a-z]+(,[0-9]+)*
这将匹配“abcdefghi,2,3”之类的东西。在第一次匹配之后,您需要查看下一个字符是否为逗号,如果是则跳过它。 (顺便说一句:如果你真的是指字母数字而不是像你的例子那样的字母,请使用 [a-z0-9]*[a-z][a-z0-9]*
而不是 [a-z] +
。)
或者,用逗号分隔字符串,然后用数字组重新组合成您的单词。
关于javascript - 根据模式将字符串分成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4341911/