JS中的正则捕获问题

在写coffeescript代码的时候突然遇到正则捕获问题: 想在后面的代码中使用之前正则匹配(match函数)中捕获的变量.

先在MDN上看了下match的说明, 可能是看的不是很仔细, 导致没理解. 于是问了下写web的同事, 得到的答复是也不太清楚(貌似这个很少用到?), 但是帮我直接在chrome的控制台里面试出来了. 好吧, 看来这种问题还是需要多动手;)

简单总结就是: 从match方法返回的变量中获取.

举个例子

直接改改官网上的例子(嗯, 学习的时候要多粘代码)

coffee match.coffee
1
2
3
4
5
6
str = 'For more information, see Chapter 3.4.5.1'

found = str.match /(chapter \d+(\.\d)*)/i

if found
    console.log found

打印出来的是

1
2
3
4
5
[ 'Chapter 3.4.5.1',
  'Chapter 3.4.5.1',
  '.1',
  index: 26,
  input: 'For more information, see Chapter 3.4.5.1' ]

对应found[1]就是第一个捕获的值, 类似perl中的$1

其他的问题

因为js中正则的修饰符没有/s, 因此在多行匹配时没法像perl一样直接通过.来匹配换行符. 遇到这种情况我们可以通过使用[\s\S]或类似的方法来搞定~

嗯, MDN改版后很漂亮;)

Comments