javascript - 根据模式将字符串分成 block

标签 javascript regex

我有一个字符串,看起来像这样:

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/

相关文章:

javascript - 如何在 <div> 内部或外部隐藏或显示文本?

sql - 如何检查数据库列的特殊符号

python - 使用 re.split 在 Python 中将文件拆分为多行

javascript - Vuejs 不允许我在请求中使用 console.log

javascript - 搜索引号数组时获取 'Undefined' - Javascript

python - python re.template 函数有什么作用?

java - 将字符串拆分为特定大小的 String[]

c# - 使用正则表达式替换 QueryString 值

javascript - 在 vue 项目中运行 npm run serve 时出现问题

javascript - Bootstrap 4 导航栏下拉菜单不起作用