Kode regex saya [A-Z]{1,}\d{3,}\w? berfungsi dengan baik mengembalikan string seperti CX3623, M3326, Y2362 tetapi saya juga ingin dapat mengembalikan string yang dalam format berikut:

YH321-2
V2021/V2022
1.2A-2351
YGH256-4268

Apa yang harus saya tambahkan ke regex?

Demo: https://regex101.com/r/MjPkFh/2

0
shAkur 23 Maret 2020, 14:31

1 menjawab

Jawaban Terbaik

Untuk bagian pertama, Anda dapat mencocokkan format yang berbeda menggunakan alternatif.

Anda dapat membuat bagian kedua opsional menggunakan grup non-penangkap opsional (?:...)? dan mencocokkan / atau - secara opsional diikuti dengan karakter A-Z dan 1+ digit.

\b(?:[A-Z]+ )?(?:[A-Z]*\d{3,}|\d+(?:\.\d+)?[A-Z]+)(?:[\/-][A-Z]*\d+)?\b

Penjelasan

  • \b Batas kata
  • (?:[A-Z]+ )? Secara opsional cocokkan 1+ karakter A-Z diikuti dengan spasi
  • (?: Grup bukan tangkapan
    • [A-Z]*\d{3,} Cocokkan 0+ kali A-Z dan 3 digit atau lebih
    • | Atau
    • \d+(?:\.\d+)?[A-Z]+ Cocokkan 1+ digit dengan bagian desimal opsional dan 1+ kali A-Z
  • ) Tutup grup
  • (?: Grup bukan tangkapan
    • [\/-][A-Z]*\d+ Cocokkan / atau -, 0+ kali A-Z dan 1+ digit
  • )? Tutup grup dan jadikan opsional
  • \b Batas kata

Demo ekspresi reguler

0
The fourth bird 23 Maret 2020, 13:35