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.

iBrazilian2
sumber
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)
Ben McCormick
sumber
Terima kasih Ben, saya mencobanya juga tetapi saya menambahkan yang lain \ di akhir.
iBrazilian2
21

Anda perlu melarikan diri /dengan a \.

/\//ig // matches /
djechlin.dll
sumber
6

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

var word = /\/(\w+)/ig;
epascarello.dll
sumber
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

Kirk H.
sumber
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"]
nupanick
sumber
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
3

Anda dapat menghindarinya dengan mendahului dengan \(membuat \/), atau Anda dapat menggunakan new RegExp('/')untuk menghindari keluar dari regex .

Lihat contoh di JSFiddle .

'/'.match(/\//)            // matches /
'/'.match(new RegExp('/')  // matches /
David Cavazos
sumber
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 (\/).

vapcguy
sumber
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.

Ronald Davis
sumber
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

Junaid Lodhi
sumber