RegExp.$1-$9
在 JavaScript 的 RegExp 物件當中,提供了 $1
, $2
, $3
... $9
等九個靜態唯讀的屬性,可以用來表示 match 到的 subexpressions (用 ()
所圈住的群組),譬如
const regexp = /(\d{2})\W(\d{2})\W(\d{4})/
來說,這裡就有三個 subexpressions
如果我們用實際的例子來看,就會發現 RegExp.$1
代表著配對到的第一個 subexpressions 的值,以此類推:
const value = "29/08/2021"
const result = value.match(regexp)
console.log(RegExp.$1) // 29
console.log(RegExp.$2) // 08
console.log(RegExp.$3) // 2021
而這個好用的地方在於,當我們在使用 replace
的時候,可以像是操作參數的方式,操作配對到的字串,然後進一步利用。譬如以下面調換順序的例子:
const value = "29/08/2021"
const result = value.(regexp, "$2/$1/$3")
console.log(result) // 08/29/2021
Replace all occurrences
如果要取代字串裡面所有某個出現的字串,譬如 bar
const str = 'foo bar foo bar foo bar'
有以下三種方法:
const a = str.replaceAll('bar', 'foo')
console.log(a) // foo foo foo foo foo foo
const b = str.split('bar').join('foo')
console.log(b) // foo foo foo foo foo foo
const c = str.replace(/bar/g, 'foo')
console.log(c) // foo foo foo foo foo foo