2011-10-31 22 views
15

bir desen ilk oluşumu hızlı bir soru: benim desen bir svg dize ve l 5 0 l 0 10 l -5 0 l 0 -10 gibi görünüyor Bir referansa karşı bazı rakipsiz karşılaştırma yapmak için Ben ilk ama tüm l hendek bilmiyorum hepsini boşaltabilir ve bir 'l' yazabilir ya da alt dizeleri kullanabilirim. Ama merak ediyorum, bunun için bir javascript regexp deyim var mı?Tüm AMA dize

+0

İlk l her zaman dizenin başında mı? –

+0

Bunu istemediğini söylediğinizi biliyorum, ancak ilk boşluğa kadar olan alt dizgeyi okumak ve sürdürmek en kolay yol gibi görünüyor. – Randy

+0

@Mark, bu usecase için evet, hatta 'l', ama aynı zamanda olumsuz bakışlarla da çalışıyor. –

cevap

24

Sen dize başlangıcını kaçınarak, bir negatif ileri yönlü deneyebilirsiniz:

/(?!^)l/g 

mi bakın çevrimiçi: Böyle jsfiddle

+0

Evet, bu işe yarıyor! –

+0

Görünen ilk '-' karakteri için çalışmak için bunu değiştirmeye çalışıyorum ve bunu çok zor bir zaman geçiriyorum :(. Herhangi bir yardım için teşekkür ederiz. Teşekkürler. –

+0

Bunu nasıl kullanırdım Bir değişken – Wlliam

-1

şey?

"l 5 0 l 0 10 l -5 0 l 0 -10".replace(/[^^]l/g, '')

+3

Bu durum bu durumda işe yaramasa da, '^' karakter sınıfındaki değişmez karakteri temsil etmiyor? – pimvdb

+2

'[^^]' '^^'dışında herhangi bir karakterle eşleşmiyor. Sıfırla eşleşmiyor Gereksinim duyduğunuzda, girişin başlangıcından başka herhangi bir karakter. '(!/[^^] /. test ('^') && /[^^]/.test('x ')) === true' –

7

herşey-büt-ilk-desen-maç yerine hiçbir JS RegExp var. Ancak, bu davranışı bir işlevi replace yöntemine ikinci bir bağımsız değişken olarak geçirerek uygulayabilirsiniz.

var regexp = /(foo bar)(red)/g; //Example 
var string = "somethingfoo bar red foo bar red red pink foo bar red red"; 
var first = true; 

//The arguments of the function are similar to $0 $1 $2 $3 etc 
var fn_replaceBy = function(match, group1, group2){ //group in accordance with RE 
    if (first) { 
     first = false; 
     return match; 
    } 
    // Else, deal with RegExp, for example: 
    return group1 + group2.toUpperCase(); 
} 
string = string.replace(regexp, fn_replaceBy); 
//equals string = "something foo bar red foo bar RED red pink foo bar RED red" 

Her eşleşme için işlev (fn_replaceBy) gerçekleştirilir. İlk maçta, işlev hemen eşleşen dizgeyle döner (hiçbir şey olmaz) ve bir bayrak ayarlanır.
Diğer tüm eşlemeler, işlevin açıklandığı gibi mantığa göre değiştirilir: Normal olarak, gruplara geri başvurmak için $0 $1 $2, ve cetera'yı kullanırsınız. fn_replaceBy'da, işlev bağımsız değişkenleri şu değerlere eşittir: İlk bağımsız değişken = $0, ikinci bağımsız değişken = $1, ve cetera.

Eşleşen alt öğe, fn_replaceBy işlevinin dönüş değeri ile değiştirilecektir. replace için ikinci bir parametre olarak bir işlev kullanmak, intelligent HTML parser gibi çok güçlü uygulamalara olanak tanır.

Ayrıca bakınız: MDN: String.replace > Specifying a function as a parameter

+0

"Akıllı HTML ayrıştırıcısı", "regex kullanarak HTML'yi ayrıştır" cevabına bağlanmayacağına ikna olmadım haha. Ama çok güzel bir cevap, ihtiyacım olan şey buydu. :) – henrebotha

2
"l 5 0 l 0 10 l -5 0 l 0 -10".replace(/^\s+/, '').replace(/\s+l/g, '') 

ilk 'l' değil uzayda öncesinde emin olur ve bir 'l' ardından herhangi bir boşluk kaldırır.

İlgili konular