Viki

Viki 写东西的地方

努力上进且优秀
x
github
email
bilibili

JavaScript 正規表現の高度な使用法

1. 怠惰なマッチ

Hi+?Hiiiii の中の Hi にのみマッチします。

'Hiii'.replace(/Hi+?/, 'x') // xii
'Hiii'.replace(/Hi+/, 'x') // x

'Hellollo'.replace(/H.*?llo/, 'x') // xllo
'Hellollo'.replace(/H.*llo/, 'x') // x

'yoooooo'.replace(/yo{2,6}?/, 'x') // xoooo
'yoooooo'.replace(/yo{2,6}/, 'x') // x

2. 単語の境界

'How are you?'.replace(/\b.+?\b/, 'x') // x are you?

3. キャプチャグループの参照

キャプチャグループの形式: (xxx), 逆参照: \n, 例: \1, \2 など

'How are you?'.replace(/(how)/i, '$1 old') // How old are you?
'1#2#3'.replace(/^(\d)#(\d)#(\d)$/i, '$1 $2 $3') // 1 2 3
'111#111#111'.replace(/^(\d+)#\1#\1$/i, '$1') // 111

4. 名前付きキャプチャグループ + 逆参照

名前付きキャプチャグループ: (?<name>xxx), 逆参照: \k<name>

'111#111'.replace(/^(?<num>\d+)#\k<num>$/i, '$<num>') // 111

5. 先読み / 後読み

以下を含みます:

  • 正の先読み: (?=xx)
  • 負の先読み: (?!xx), 負の先読みはマッチしないことを意味します
  • 正の後読み: (?<=xx)
  • 負の後読み: (?<!xx), 負の後読みはマッチしないことを意味します

6. フラグ

g グローバルマッチ、i 大文字と小文字を区別しないマッチ以外に、以下のフラグがあります:

  • m: multiline の略で、複数行マッチングで ^$ を行の先頭と末尾にマッチさせます。
  • u: unicode の略で、Unicode ポイントエスケープを使用できるようにします。
  • y: sticky の略で、粘着マッチングを有効にし、正規表現が最後のマッチ位置からマッチしようとします。

7. replace の第 2 引数

文字列の場合、以下の特殊な文字を使用できます:

  • $n: 1<=n<=99, 1 番目から 99 番目のキャプチャグループでキャプチャされたテキストにマッチします。
  • $&: マッチした部分文字列全体にマッチします。
  • `$``: マッチした部分文字列の左側のテキストにマッチします。
  • $': マッチした部分文字列の右側のテキストにマッチします。
  • $$: ドル記号にマッチします。
  • $<name>: 名前付きキャプチャグループでキャプチャされた結果の値にマッチします。

関数の場合、関数の戻り値が置換文字列として使用されます。関数は以下のルールに従います:

  • 第 1 引数はマッチした部分文字列に対応し、上記の $& に対応します。
  • 第 1+1=2 番目から第 n+1 番目の引数は、対応する 1 番目から n 番目のキャプチャグループに対応します(存在する場合)。
  • 第 n+2 番目の引数はオフセットであり、マッチした部分文字列が元の文字列内でのオフセットを示します。
  • 第 n+3 番目の引数はマッチした元の文字列です。
  • 第 n+4 番目の引数は名前付きキャプチャグループのマッチオブジェクトです。

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。