string1.split("(?=-)");
这有效,因为实际上需要正则表达式。你实际看到的是一个“零宽度正前瞻”。split
我很想解释更多,但我的女儿想玩茶话会。:)
编辑:返回!
为了解释这一点,我将首先向您展示一个不同的操作:split
"Ram-sita-laxman".split("");
这会在每个长度为零的字符串上拆分字符串。每个字符之间都有一个长度为零的字符串。因此,结果是:
["", "R", "a", "m", "-", "s", "i", "t", "a", "-", "l", "a", "x", "m", "a", "n"]
现在,我修改了我的正则表达式 (),使其仅在零长度字符串后跟破折号时才匹配它们。""
"Ram-sita-laxman".split("(?=-)");
["Ram", "-sita", "-laxman"]
在该示例中,表示“前瞻”。更具体地说,它的意思是“积极的展望”。为什么是“积极的”?因为您还可以有负前瞻 (),它将在每个不后跟破折号的零长度字符串上拆分:?=
?!
"Ram-sita-laxman".split("(?!-)");
["", "R", "a", "m-", "s", "i", "t", "a-", "l", "a", "x", "m", "a", "n"]
您还可以使用正的 lookbehind (),它将在前面有一个短划线的每个长度为零的字符串上拆分:?<=
"Ram-sita-laxman".split("(?<=-)");
["Ram-", "sita-", "laxman"]
最后,您还可以使用负 lookbehind (),它将在前面没有破折号的每个长度为零的字符串上拆分:?<!
"Ram-sita-laxman".split("(?<!-)");
["", "R", "a", "m", "-s", "i", "t", "a", "-l", "a", "x", "m", "a", "n"]
这四个表达式统称为 lookround 表达式。
奖励:将它们放在一起
我只是想展示我最近遇到的一个例子,它结合了两个外观表达式。假设您希望将大写字母标识符拆分为其令牌:
"MyAwesomeClass" => ["My", "Awesome", "Class"]
您可以使用以下正则表达式完成此操作:
"MyAwesomeClass".split("(?<=[a-z])(?=[A-Z])");
这将对每个长度为零的字符串进行拆分,该字符串前面有一个小写字母 (),后跟一个大写字母 ()。(?<=[a-z])
(?=[A-Z])
此技术也适用于驼峰大小写标识符。