我想在JavaScript中拉出一个字符串中间的数字.在Ruby(我的主要语言)中我会这样做:
红宝石:
name = "users[107][teacher_type]"
num = name.scan(/\d+/).first
Run Code Online (Sandbox Code Playgroud)
但在JavaScript中我必须这样做,这看起来有点笨重.
JavaScript的:
var name = "users[107][teacher_type]"
var regexp = new RegExp(/\d+/)
var num = regexp.exec(name)[0]
Run Code Online (Sandbox Code Playgroud)
有没有办法在不构建RegExp对象的情况下拉出匹配的部分?也就是Ruby的String#scan的单行代码?
另外,作为旁注,由于此字符串将始终具有相同的格式,因此我可以使用.replace进行此操作.这不是一个聪明的解决方案,但我再次遇到JavaScript问题.
在Ruby中:
num = name.gsub(/users\[|\]\[teacher_type\]/,"")
Run Code Online (Sandbox Code Playgroud)
但是当我在JavaScript中尝试这个时,它不喜欢正则表达式中间的or(|):
在JavaScript中:
//works
num = name.replace(/users\[/, "").replace(/\]\[teacher_type\]/,"")
//doesn't work
num = name.gsub(/users\[|\]\[teacher_type\]/,"")
Run Code Online (Sandbox Code Playgroud)
谁能让我直截了当?
您只需new RegExp()在创建动态正则表达式时使用该部件.您可以在其他时间使用文字./\d + /相当于new RegExp("\\d+").请注意,使用后者时必须转义特殊字符.
另外值得注意的是String#match返回null或数组.基于提供的解决方案(parseInt(name.match(/\d+/), 10)),这一点并不明显.它只是碰巧传递给它时转换为字符串parseInt.ParseInt将字符串值转换为整数(如果可能).
name.match(/\d+/)[0]
/\d+/.exec(name)[0]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这两者在功能上是相同的.
您指的另一个匹配(负匹配)需要一个特殊标志.要复制gsub的功能,您需要告诉正则表达式使用g标志多次应用.
'users[107][teacher_type]'.replace(/users\[|\]\[teacher_type\]/g,'')
Run Code Online (Sandbox Code Playgroud)
或者,如果new RegExp由于某种原因你必须使用,你会像上面那样完成同样的事情:
'users [107] [teacher_type]'.replace(new RegExp('users\[|\_]\[teacher_type \]','g'),'')
再次注意我是如何逃避所有反斜杠的.Mozilla的开发人员中心是一个很好的 参考,可以在javascript中熟悉正则表达式.
| 归档时间: |
|
| 查看次数: |
6247 次 |
| 最近记录: |