Eğik Çizgi ile bir normal ifadeyi eşleştirme


95

JavaScript ile pek tecrübem yok ama kullanmak yerine @veya #kullanacak bir etiket sistemi oluşturmaya çalışıyorum /.

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

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

Nasıl kullanabilirsiniz /yerine #. Yapmayı var slash = '/'ve eklemeyi denedim + slash +ama bu başarısız oldu.


1
Lütfen başlığı değiştirin. Ve gerçekten ne yapmaya çalışıyorsun? Sorunuzu okuduktan sonra hala hiçbir fikrim yok.
OptimusCrime

Anladığımdan emin değilim.
John Strickler

Yanıtlar:


128

Bundan böyle kurtulabilirsiniz.

/\//ig; //  Matches /

veya sadece indexOf kullanın

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

Teşekkürler Ben, ben de denedim ama sonunda bir \ daha ekledim.
iBrazilian2



6

Normal ifadelerde, "/" kaçılması gereken özel bir karakterdir (AKA, hizmet edebileceği herhangi bir özel işlevi geçersiz kılarak önce bir \ koyarak işaretlenir).

İşte ihtiyacınız olan şey:

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

RegEx özel karakterlerini buradan okuyun: http://www.regular-expressions.info/characters.html


18
"/", normal ifadelerde özel bir karakter değildir. Ancak JavaScript'te normal ifadenin başladığı ve bittiği yeri sınırlayan özel bir karakterdir.
sokkyoku

5

Ayrıca eğik çizginin özel JS işlemesini bir karakter grubuna ekleyerek şu şekilde çalışabilirsiniz:

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

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

2
+1, Kaçmayı önlemek için bir karakter kümesi kullanmak, RegEx bir karakteri daha uzun yapar, ancak okunabilirlik açısından buna değer: /[/]/sondaki sınırlayıcıyı görsel olarak daha net bir şekilde farklılaştırır /\//.
Dem Pilafian

2
/[/]/okunması ve çalışması daha kolaydır, ancak ne yazık ki bazı RegEx doğrulayıcıları, bir karakter grubu içinde bile "Çıkış karaktersiz bir sınırlayıcıdan ters eğik çizgiyle kaçılmalıdır" şeklinde rapor verecektir . Bu yüzden çirkin forma geri döndüm . /\//
Dem Pilafian


1

Benim için, /C # 'da bir tarihle eşleşmeye çalışıyordum . Bunu sadece kullanarak yaptım (\/):

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 de benzer şekilde kullanabilmelidir (\/).


Düşürücü, açıklamak ister misin? Bu işe yarıyor ve bunu test ederek kanıtladım.
vapcguy

1
Bence bir kazaydı, üzgünüm Geri almaya çalıştım, ancak cevap düzenlenmedikçe oyumun kilitlendiğini söylüyor. Gördüğüm tek şey, kullanmıyor gibi göründüğünüz grupları yakalama kaydınızın olması. Her şeyin parantez içinde olmasının herhangi bir nedeni var mı?
Ryan Quinn

1
@RyanQuinn Açıklama için teşekkürler. Beklediğim belirli bir rakamı temsil edecek şekilde şeyleri gruplamak için parantezleri kullandım. Ayrıca, test etmek için kullandığım bir sitede de onlara ihtiyaç duyuyor gibiydi: regexr.com Gönderimi düzenledim (sonuna bir boşluk ekledim), böylece isterseniz olumsuz oyu kaldırabilirsiniz.
vapcguy

0

Ve ile ayrılmış metinleri çıkarırken yukarıdakilerle ilgili iki sorunla karşılaştım \ve /kullanmak dışında her ikisine de uyan , başlangıçta new RegExpgerekli olan bir çözüm buldum \\\\. Bu bulgular Chrome ve IE11'dedir.

Normal ifade

/\\(.*)\//g

çalışmıyor. //Kaçış karakterine rağmen bir yorumun başlangıcı olarak yorumlandığını düşünüyorum . Normal ifade (benim durumumda eşit derecede geçerli olsa da genel olarak değil)

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

da çalışmıyor. Sanırım ikincisi /, kaçış karakterine rağmen normal ifadeyi sonlandırıyor.

Benim için çalışır temsil etmek /olarak \x2Fonaltılık gösterimi olan /. Bunun kullanmaktan daha verimli ve anlaşılır olduğunu düşünüyorum new RegExp, ancak elbette onaltılık kodu tanımlamak için bir yoruma ihtiyacı var.


0

Forward Slash özel bir karakterdir, bu nedenle, çalışmasını sağlamak için eğik çizgiden önce bir ters eğik çizgi eklemeniz gerekir

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

nerede / aramayı temsil eder / Bu şekilde

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.