Mencocokkan Garis Maju dengan regex


90

Saya tidak memiliki banyak pengalaman dengan JavaScript, tetapi saya mencoba membuat sistem tag yang, alih-alih menggunakan @atau #, akan menggunakan /.

var start = /#/ig; // @ Match

var word = /#(\w+)/ig; //@abc Match

Bagaimana saya bisa menggunakan /file #. Saya sudah mencoba melakukan var slash = '/'dan menambahkan + slash +, tetapi gagal.


1
Silahkan ganti judulnya. Dan apa yang sebenarnya kamu coba lakukan? Saya masih tidak tahu setelah membaca pertanyaan Anda.
OptimusCrime

Saya tidak yakin saya mengerti.
John Strickler

Jawaban:


123

Anda bisa menghindarinya seperti ini.

/\//ig; //  Matches /

atau cukup gunakan indexOf

if(str.indexOf("/") > -1)

Terima kasih Ben, saya mencobanya juga tetapi saya menambahkan yang lain \ di akhir.
iBrazilian2


6

Jika Anda ingin menggunakan, /Anda perlu menghindarinya dengan file\

var word = /\/(\w+)/ig;

6

Dalam ekspresi reguler, "/" adalah karakter khusus yang perlu di-escape (AKA ditandai dengan menempatkan \ sebelumnya sehingga meniadakan fungsi khusus yang mungkin dilayaninya).

Inilah yang Anda butuhkan:

var word = /\/(\w+)/ig; //   /abc Match

Baca tentang karakter khusus RegEx di sini: http://www.regular-expressions.info/characters.html


17
"/" bukan karakter khusus dalam ekspresi reguler. Namun itu adalah karakter khusus dalam JavaScript yang membatasi tempat regex dimulai dan diakhiri.
sokkyoku

5

Anda juga dapat mengatasi penanganan JS khusus untuk garis miring ke depan dengan melampirkannya dalam grup karakter, seperti:

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

const word = /[/](\w+)/ig;
"/dev/null".match(word)      // => ["/dev", "/null"]

2
+1, Menggunakan kumpulan karakter untuk menghindari pelolosan memang membuat RegEx satu karakter lebih panjang, tetapi layak untuk dibaca: /[/]/secara visual membedakan pembatas akhir dengan lebih jelas daripada /\//.
Dem Pilafian

2
/[/]/lebih mudah dibaca dan berfungsi, tetapi sayangnya, beberapa validator RegEx akan melaporkan "Pembatas yang tidak lolos harus di-escape dengan garis miring terbalik" bahkan di dalam grup karakter . Jadi, saya telah beralih kembali ke /\//bentuk jelek .
Dem Pilafian


1

Bagi saya, saya mencoba untuk mencocokkan /di kencan di C #. Saya melakukannya hanya dengan menggunakan (\/):

string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
string text = "Start Date: 4/1/2018";

Match m = Regex.Match(text, pattern);

if (m.Success) 
{ 
    Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
}
else
{
    Console.WriteLine("Not Found!");
}

JavaScript juga harus dapat digunakan dengan cara yang sama (\/).


Downvoter, mau menjelaskan? Ini berhasil dan saya telah membuktikannya melalui pengujian.
vapcguy

1
Saya pikir itu kecelakaan, maaf. Saya mencoba untuk membatalkannya, tetapi dikatakan suara saya terkunci kecuali jawabannya diedit. Satu-satunya hal yang saya lihat adalah Anda memiliki log grup penangkap yang sepertinya tidak Anda gunakan. Ada alasan mengapa semuanya ada dalam tanda kurung?
Ryan Quinn

1
@RyanQuinn Terima kasih atas penjelasannya. Saya menggunakan tanda kurung untuk mengelompokkan berbagai hal bersama untuk mewakili digit tertentu yang saya harapkan. Tampaknya juga mengharuskan mereka di situs yang saya gunakan untuk mengujinya: regexr.com Saya mengedit posting saya (baru saja menambahkan spasi di bagian akhir), jadi Anda dapat menghapus suara negatif tersebut jika mau.
vapcguy

0

Saya mengalami dua masalah yang terkait dengan hal tersebut di atas, saat mengekstrak teks yang dibatasi oleh \dan /, dan menemukan solusi yang cocok untuk keduanya, selain menggunakan new RegExp, yang memerlukan \\\\di awal. Temuan ini ada di Chrome dan IE11.

Ekspresi reguler

/\\(.*)\//g

tidak bekerja. Saya pikir //itu ditafsirkan sebagai awal dari komentar meskipun karakter melarikan diri. Ekspresi reguler (sama-sama valid dalam kasus saya meskipun tidak secara umum)

/\b/\\(.*)\/\b/g

tidak berhasil. Saya pikir yang kedua /menghentikan ekspresi reguler meskipun ada karakter melarikan diri.

Apa yang berhasil bagi saya adalah merepresentasikan /sebagai \x2F, yang merupakan representasi heksadesimal dari /. Saya pikir itu lebih efisien dan dapat dimengerti daripada menggunakan new RegExp, tetapi tentu saja perlu komentar untuk mengidentifikasi kode hex.


0

Forward Slash adalah karakter khusus jadi, Anda harus menambahkan garis miring terbalik sebelum garis miring untuk membuatnya berfungsi

$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";

di mana / mewakili pencarian / Dengan cara ini Anda

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.