2010-05-07 53 views
1

我想知道在JavaScript的RegExp引擎中是否支持可變長度lookbehind斷言?在RegExp中刪除使用變長lookbehind的前導空格

例如,我想匹配字符串「[很多空格和/或製表符的]可變長度的回顧後」字符串「可變長度」,我有這樣的事情但它並沒有在不同的正則表達式測試進展順利:

^(?<=[ \t]+).+(?= lookbehind) 

如果它是一個非法的模式,這將是一個很好的解決方法呢?謝謝!

回答

2

Javascript根本沒有後視。 Steven Levithan有written up a few says to sort of mimic it,這可能會有所幫助。

我不太明白你的例子,因爲它好像這將符合該法案:

/^\s+(.+)lookbehind$/ 

...它匹配一個或多個字符空格後面是一個或多個任意字符(在一個捕獲組中),然後是「lookbehind」一詞。使用這樣的:

var str = "  variable length lookbehind"; 
var match = /^\s+(.+)lookbehind$/.exec(str); 

產生此數組:

match[0]: |  variable length lookbehind| 
match[1]: |variable length| 

在Javascript中,陣列中的第一個條目是整個匹配的字符串,和隨後的條目是捕獲基團。

但你顯然有正則表達式把握好,所以我不知道這是你在找什麼...

的東西在這個總面積要注意的是,一些實現的在Javascript中的RegExp引擎不會相當於句柄\s正確(它們錯過了匹配ASCII範圍之上的一些空格字符);請參閱S_REGEXP_WHITESPACE_CHARACTER_CLASS_BUGGY測試here

+0

嗨,其實我沒有很好地理解正則表達式,正如你的例子所示,這比我想出的方式更直觀。有關陣列的好消息,它並沒有跨越我的想法哈哈,是的我的情況匹配[1]將是我正在尋找的。 – Dan7 2010-05-07 09:32:57

+0

@Shizhidi:啊,很好,很高興幫助! – 2010-05-07 09:49:25

2

Faster JavaScript Trim

這表明許多方面的微調是可以做到(其中沒有需要向後看),並比較了不同的速度方法。如果最終目標包括剝離領先的白色空間,不要害怕將其分解爲多個操作。

有些人在遇到問題時會想:「我知道,我會用正則表達式。「現在他們有兩個問題 - 傑米·薩溫斯基

+0

+1我不願意承認它,但它是真的。雖然我想要做的不是完全修剪操作,但我可以使用分組。:) – Dan7 2010-05-07 09:33:56

2

我不知道這是否會幫助你正則表達式,但如果你想刪除空格,您可以,如果你使用的裝飾功能

function trimAll(sString) { 
    while (sString.substring(0, 1) == ' ') { 
    sString = sString.substring(1, sString.length); 
    } 
    while (sString.substring(sString.length - 1, sString.length) == ' ') { 
    sString = sString.substring(0, sString.length - 1); 
    } 
    return sString; 
} 

否則想檢查字符串的存在,你可以使用indexOf IndexOf on StackOverflow.com