Saya ingin menemukan semua komentar dalam kode SQL, misalnya:

pilih 1 --komentar untuk menghapus

Sebuah regex sederhana akan menjadi:

//-.+/g

Tetapi tidak jika itu dalam tanda kutip, misalnya:

pilih 1, '--jangan hapus kode'

pilih 1, 'hamm --jangan hapus kode'

pilih 'hamm --jangan hapus kode',1

0
Avi Zloof 3 April 2019, 15:54

1 menjawab

Jawaban Terbaik

Anda mungkin mencocokkan apa yang tidak ingin Anda temukan dan tangkap dalam grup apa yang ingin Anda temukan menggunakan alternatif

'[^']*--[^']*'|(--.+)

Itu akan cocok

  • [^']*--[^']*' Cocokkan bukan ' 0+ kali, lalu -- dan lagi bukan ' 0+ kali
  • | atau
  • (--.+) Tangkap dalam pencocokan grup 1 -- dan string lainnya

Demo ekspresi reguler

[
  "select 1 --remark to remove",
  "select 1, '--do not remove code'",
  "select 1, 'hamm --do not remove code'",
  "select 'hamm --do not remove code',1",
].forEach(s => {
  let res = s.match(/'[^']*--[^']*'|(--.+)/);
  if (undefined !== res[1]) {
    console.log(res[1]);
  }
});
2
The fourth bird 3 April 2019, 13:09