2012-07-22 29 views
3

我想使用正則表達式來匹配和替換我的文件名和右括號之間的任何東西。lookbehind在JavaScript中?

我寫了一個正則表達式:

/(?<=imagecheck.php)[^)]*/ 

在PHP的作品,而不是在Javascript。

...我會怎麼做在JS?

例如:

input string example 1: url(127.0.0.1/imagecheck.php) 
input string example 2: url(127.0.0.1/imagecheck.php?boost=9881732213826123918238) 
outcome string example: url(127.0.0.1/imagecheck.php?reload=oh_yes_plx&boost=123810982346023984723948723023423) 
+4

你試過谷歌嗎? http://blog.stevenlevithan.com/archives/javascript-regex-lookbehind – 2012-07-22 04:13:57

+0

我認爲你不需要正則表達式,但我需要正確理解你想要的。你能發表一些你想做什麼的例子嗎? – davidbuzatto 2012-07-22 04:14:09

+0

你一定是在開玩笑,這肯定會讓我的頭部爆炸。 – Anonymous 2012-07-22 04:14:46

回答

2

向後看是不是在Javascript支持。您可以使用捕獲組"imagecheck.php"代替後捕獲文本:

.match(/imagecheck.php([^)]*)/) 

結果將在返回數組的索引1(如果有匹配)。

這是後"imagecheck.php"

.replace(/(imagecheck.php)[^)]*/, "$1") 
+0

但我需要更換,而不僅僅是匹配... – Anonymous 2012-07-22 04:22:01

+0

請再次閱讀問題的第一行。 :) – Anonymous 2012-07-22 04:23:02

+1

@nhahtdh:我認爲這個問題總是這麼說;)總是檢查之前是snarky! – Matchu 2012-07-22 04:23:15

2

沒有向後看在JavaScript中移除任何的例子,您可以將您的文件名和閉幕括號這樣間取代一切:

str = str.replace(/imagecheck.php\([^)]*\)/, "imagecheck.php(whatever)"); 

,或者您可以使用捕獲組和編號參考以避免重複初始模式:

str = str.replace(/(imagecheck.php)\([^)]*\)/, "$1(whatever)"); 
+0

...但這個答案比我的XRegExp更快,無依賴,全能更清潔的答案更好:) – Matchu 2012-07-22 04:27:48

+0

是的,但它有點冗餘... – Anonymous 2012-07-22 04:33:38

+0

@匿名:如果你想要幹,你總是可以使用新的RegExp(前綴+「[^)] *」)'創建正則表達式,然後運行'str.replace(pattern,prefix +「{whatever suffix}」)' – Matchu 2012-07-22 04:37:10

0

儘管Javascript本身並不支持正則表達式中的逆序,但我們可以使用,這是一個功能更強大的Javascript正則表達式引擎XRegExp

var pattern = XRegExp('/(?<=imagecheck.php)[^)]*/', 'g'); // g is the global flag 
XRegExp.replace(input, pattern, replacement); 
相關問題