我想知道在JavaScript的RegExp引擎中是否支持可變長度lookbehind斷言?在RegExp中刪除使用變長lookbehind的前導空格
例如,我想匹配字符串「[很多空格和/或製表符的]可變長度的回顧後」字符串「可變長度」,我有這樣的事情但它並沒有在不同的正則表達式測試進展順利:
^(?<=[ \t]+).+(?= lookbehind)
如果它是一個非法的模式,這將是一個很好的解決方法呢?謝謝!
我想知道在JavaScript的RegExp引擎中是否支持可變長度lookbehind斷言?在RegExp中刪除使用變長lookbehind的前導空格
例如,我想匹配字符串「[很多空格和/或製表符的]可變長度的回顧後」字符串「可變長度」,我有這樣的事情但它並沒有在不同的正則表達式測試進展順利:
^(?<=[ \t]+).+(?= lookbehind)
如果它是一個非法的模式,這將是一個很好的解決方法呢?謝謝!
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。
Javascript正則表達式引擎不支持lookbehinds,只支持lookaheads。 在這裏你可以找到一個模仿的解決方案: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
這表明許多方面的微調是可以做到(其中沒有需要向後看),並比較了不同的速度方法。如果最終目標包括剝離領先的白色空間,不要害怕將其分解爲多個操作。
有些人在遇到問題時會想:「我知道,我會用正則表達式。「現在他們有兩個問題 - 傑米·薩溫斯基
+1我不願意承認它,但它是真的。雖然我想要做的不是完全修剪操作,但我可以使用分組。:) – Dan7 2010-05-07 09:33:56
我不知道這是否會幫助你正則表達式,但如果你想刪除空格,您可以,如果你使用的裝飾功能
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
嗨,其實我沒有很好地理解正則表達式,正如你的例子所示,這比我想出的方式更直觀。有關陣列的好消息,它並沒有跨越我的想法哈哈,是的我的情況匹配[1]將是我正在尋找的。 – Dan7 2010-05-07 09:32:57
@Shizhidi:啊,很好,很高興幫助! – 2010-05-07 09:49:25