首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby用捕获的正则表达式模式替换字符串

Ruby用捕获的正则表达式模式替换字符串
EN

Stack Overflow用户
提问于 2012-03-28 06:10:45
回答 5查看 119.9K关注 0票数 129

我在把它翻译成Ruby时遇到了麻烦。

下面是一段JavaScript,它做的正是我想做的事情:

代码语言:javascript
复制
function get_code(str){
    return str.replace(/^(Z_.*): .*/,"$1")​​​​​​​​​​​​​​​​​​​​​​​​​​​;
}

我已经尝试过gsubsubreplace,但似乎都不能满足我的期望。

下面是我尝试过的一些例子:

代码语言:javascript
复制
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/) { |capture| capture }
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "$1")
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "#{$1}")
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "\1")
"Z_sdsd: sdsd".gsub(/(.).*/) { |capture| capture }
EN

回答 5

Stack Overflow用户

发布于 2012-03-28 06:20:16

需要对双引号中的\1进行转义。所以你想要

代码语言:javascript
复制
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "\\1")

代码语言:javascript
复制
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, '\1')

参见the docs on gsub,其中显示“如果是双引号字符串,则两个反向引用的前面都必须有一个额外的反斜杠。”

也就是说,如果你只是想要比赛的结果,你可以这样做:

代码语言:javascript
复制
"Z_sdsd: sdsd".scan(/^Z_.*(?=:)/)

代码语言:javascript
复制
"Z_sdsd: sdsd"[/^Z_.*(?=:)/]

请注意,(?=:)是一个非捕获组,因此:不会出现在您的比赛中。

票数 37
EN

Stack Overflow用户

发布于 2014-02-08 07:12:26

代码语言:javascript
复制
 "foobar".gsub(/(o+)/){|s|s+'ball'}
 #=> "fooballbar"
票数 18
EN

Stack Overflow用户

发布于 2014-10-21 01:10:10

如果您需要使用正则表达式来过滤某些结果,然后仅使用捕获组,则可以执行以下操作:

代码语言:javascript
复制
str = "Leesburg, Virginia  20176"
state_regex = Regexp.new(/,\s*([A-Za-z]{2,})\s*\d{5,}/)
# looks for the comma, possible whitespace, captures alpha,
# looks for possible whitespace, looks for zip

> str[state_regex]
=> ", Virginia  20176"

> str[state_regex, 1] # use the capture group
=> "Virginia"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9898461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档