2015-08-22 61 views
1

PS: - >我知道有一個簡單的解決方案,我的需要,我可以這樣做,但是, - 我正在尋找一個「差異」的解決方案,爲了學習的緣故&挑戰清酒。所以,這只是爲了解決一個傳統方式較少的算法。RegExp JS關於順序patttern匹配

我正在解決一個算法,並認爲我有一切運作良好,但一個用例失敗。那是因爲我動態構建了一個正則表達式 - 現在,我的問題是這樣的。

我需要按順序匹配字母,直到一個不匹配,然後我只是「匹配」匹配的順序。

所以......可以說,我是匹配此:

"zaazizz" 

with this: /\bz[a]?[z]?/ 

"zizzi".match(/\bz[z]?[i]?/) 

目前,這與匹配:[紫],但比賽只應[Z]

zzi僅匹配「zizzi」前面的「z」,按照zzi的順序 - 我現在使用的是[z]?等等..所以它是可選的..但我真正需要的是順序匹配..我只會從前面得到「zi」IF,它匹配:zzi根據我的正則表達式....所以,某種前瞻性要麼 ?。我試過了?=和!=沒有運氣。

+0

我不知道我理解你的問題。所以當你有「abcdefg」作爲匹配,並且輸入是「abczzzz」時,你想要「abc」作爲輸出?我會建議不使用正則表達式,但簡單的單字符比較。 – PhilMasterG

+0

是的 - 可以說字符串是:「zzbbabc」,我的匹配器是:zbba,它只會匹配「z」...請記住,我的匹配器是動態的,它會更改每個迭代..所以我可以匹配第一?加上順序的每一個後面的順序。根據前面的例子,如果我的匹配器是「zzbzb」,它只會匹配「zzb」。 –

+0

好吧,所以我真的建議只比較每個字符,直到不匹配,不使用正則表達式。 – PhilMasterG

回答

1

我仍然認爲非正則表達式在這裏最好。看一看下面的JS-代碼:

var match = "abcdef"; 
var input = "abcxdef"; 

var mArray = match.split(""); 
var inArray = input.split(""); 

var max = Math.min(mArray.length, inArray.length) - 1; 

for (var i = 0; i < max; i++) { 
    if (mArray[i] != inArray[i]) { break; } 
} 

input.substring(0, i); 

如果匹配的字符串,部分匹配,輸入是輸入input.substring(0, i)是匹配的部分結果。你可以隨時更改比賽。

+0

謝謝菲利普 - 我明白你要去哪裏,講述真相,如果我只是通過循環進行簡單的字符串比較,我可以輕鬆解決我的問題 - 但我想走下一條不同的路線。一個用於學習,另一個用於尋找與最常見的解決方案不同的解決方案。 Thansk爲你的迴應。提高你的幫助意願! –

+0

哦,我不知道,也許你應該加上你的問題。 – PhilMasterG

+0

我做了 - 謝謝:-) –