2015-12-04 22 views
5

içinde bir dize ile başlarsa, bir grupla eşleşmiyor Bazı düzenli ifadelerle karşılaşmayan javascript'te, normal bir grup seçeneğiyle mücadele etmiyorum, yalnızca bir grupla eşleşmiyorsa, yalnızca bir grubu eşleştirmek için dize: Ben www.mytestwebsite.comRegex - javascript

/ 
önce geldiği takdirde algılamaya çalışıyorum şu

hello http:/www.mytestwebsite.com is awesome 

kadar

(^|)(www\.[\S]+?(?= |[,;:!?]|\.( )|$)) 

ve ben eşleştirmek istemiyorsanız eğer, aksi uzakta maç. İleriye bakmayı denedim ama şimdiden yaptığım bakışla çelişiyor gibi görünüyordu.

(?! & # x2f), farklı alanlarda, hiç başarı olmadan yerleştirerek oynuyorum.

(^|)((?!&#x2f)www\.[\S]+?(?= |[,;:!?]|\.( )|$)) 

bir maç
içerirler bu web sitelerini maç için hedefinizi gerçekleştirmek nedeniyle geriye ilerleme JS, eksikliği tek yolunu

+0

"(^ | / |) 'u (www \. [\ S] +? (? = | [,;:!?] | \. ( ) | $))' yi denediniz mi? Maçta & # x2fl değeri içerir – jperezov

+0

@jperezov. – JonFriesen

+0

Sadece iki eşleşme yapabilirsin. – miken32

cevap

3

öncesinde ise eşleşmemelerine ileriye bakmak errant / da.

Bunun nedeni, bir görünümün geçerli konumu ilerlememesidir.
Sadece sarf malzemesinde bulunan no'lu numaralı eşleşme, bir önceki sayfadaki metni gösterecektir.

Ancak, iyi bir geçici çözüm her zaman hatalı metni reerx içinde bir seçenek olarak
içermekteydi. Daha sonra, etrafında bazı yakalama grupları koymak bir maç için
grubunu sınamak istiyorum. Eşleşirse, atlayın, sonraki maça geçin.

Bu, her başarılı eşleşmeyi kontrol etmek için bir süre döngüsünde oturmayı gerektirir.
Aşağıdaki regex'te, grup 1 eşleştiyse, grup 2 url,
saklamıyorsa, 2 url grubunu saklayın.

(/)?(www\.\S+?(?= |[,;:!?]|\.( )|$))

Biçimlendirilmiş:

(&\#x2f;)?     # (1) 
(       # (2 start) 
     www\. \S+? 
     (?= 
      &\#x20; 
     | [,;:!?] 
     | \. 
      (&\#x20;)     # (3) 
     | $ 
    ) 
)        # (2 end) 
0

Diğer bir seçenek (ve sıfır performans testi yaptık), bir normal ifade, ikinci parametre olarak bir geri arama string.replace() kullanmak olacaktır. işlevini yerine iç

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

Ardından, başına/geri arama geçirilen ofset parametresini kullanarak, sen eşleşti dizeye maç için istemiyoruz yasadışı/karakterleri ekleme Eğer (docs yukarıya bakınız) her bir eşleşmeyi belirleyebilir ve pozisyonu belirleyebilir ve metni değiştirip değiştirmeyeceğine karar verebilir.