2015-08-22 31 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

我做了 - 谢谢:-) –