这个正则表达式如何在第一个元音上分裂?

Tay*_*ton 2 ruby regex

此代码在第一个元音处将一个单词拆分为两个字符串.为什么?

word = "banana"
parts = word.split(/([aeiou].*)/)
Run Code Online (Sandbox Code Playgroud)

小智 5

这里的关键是正在两者之间所使用的正则表达式(或正则表达式)/

[aeiou] 说要查找其中一个角色的第一个实例.

. 匹配任何单个字符

* 将之前的内容修改为表示匹配0或更多

(...) 意味着捕获括号之间的所有内容

翻译成英语这个正则表达式可能会读取类似"给定一个字符串,找到第一个元音后跟零个或多个字符.收集该元音及其后面的字符并将它们放在一边."

更令人困惑的部分是正则表达式与split方法的交互.正则表达式返回的值是'anana'.我们可以看到用'anana'调用split并没有相同的结果:

'banana'.split('anana') #=> ["b"]

但是当使用使用捕获组(或括号)的正则表达式调用split时,该分割中的(...)任何内容也将在分割结果中返回.这就是为什么:

'banana'.split /([aeiou].*)/ #=> ["b", "anana"]

如果你想了解更多关于正则表达式如何工作的信息(特别是在ruby中),Rubular是一个很好的资源 - http://www.rubular.com/r/XEUgPhOdlH