text = 'http://www.site.info www.escola.ninja.br google.com.ag'
表达: (http:\/\/)?((www\.)?\w+\.\w{2,}(\.\w{2,})?)
在Javascript中,此表达式有效,返回:
["http://www.site.info", "www.escola.ninja.br", "google.com.ag"]
为什么它不能在红宝石中工作?
例如:
使用Match方法:
p text.match(/(http:\/\/)?(www\.)?\w+\.\w{2,}(\.\w{2})?/)
#<MatchData "http://www.site.info" 1:"http://" 2:"www." 3:nil>
使用扫描方法:
p text.scan(/(http:\/\/)?(www\.)?\w+\.\w{2,}(\.\w{2})?/)
[["http://", "www.", nil], [nil, "www.", ".br"], [nil, nil, ".ag"]]
我该如何返回以下数组?
["http://www.site.info", "www.escola.ninja.br", "google.com.ag"]
原因是str.match(/regex/g)
在JS中不保留捕获的子字符串,请参阅MDNString#match()
参考:
如果正则表达式包含该
g
标志,则该方法返回,Array
其中包含所有匹配的子字符串而不是匹配的对象。捕获的组不返回。
在Ruby中,您必须修改模式以删除多余的捕获组并将捕获的组转换为非捕获组(即,将unscaped替换(
为(?:
),因为否则,只有被捕获的子字符串会通过String#scan
方法获得输出:
如果模式不包含任何组,则每个单独的结果均由匹配的字符串$&组成。如果模式包含组,则每个单独的结果本身就是一个数组,每个组包含一个条目。
使用
text = 'http://www.site.info www.escola.ninja.br google.com.ag'
puts text.scan(/(?:http:\/\/)?(?:www\.)?\w+\.\w{2,}(?:\.\w{2,})?/)
演示的输出:
http://www.site.info
www.escola.ninja.br
google.com.ag
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句