2012-08-01 42 views
2

我在JavaScript中工作,並檢查我的文本是否有一些跡象。我想檢查我的文本是否有()和&字母,或者它有重複的字母。一些例子:正則表達式檢查&()並重復字母

測試 - 有多個噸

TES &噸 - 具有&

試驗(測試) - 具有(和),多個T和兩次的「e '字母

test &(test - 具有&和(和多個T和e

測試&(&噸 - 具有多個噸,多發性&和(

tesra - 這一個犯規適合任何型態

我已經做了這樣的事情:

if ((/(\w+)(?=\1)/g).test(str)) alert('multiple signs') 

但它只計算多個符號,如果他們是一個接一個,所以'teest'將適合模式和測試wouldnt。有誰能夠幫助我?我一直不明白那些正則表達式功能:( 它可以在兩個正則表達式來劃分。

Thanx提前

+0

那麼在你看來,最好能匹配複雜的圖案? – Kalreg 2012-08-01 20:20:36

回答

1

這應該這樣做,雖然它可能不是非常有效的(因爲它不固定):

(?:[&()]|(\w)[^\1]*\1) 

另一種方法是簡單地遍歷字符,檢查並計數:

function contains_multiple_chars(str, extra) { 
    var chars = {}; 
    for(var i = 0,l = str.length; i < l;i++) { 
     var c = str.charAt(i); 
     if(c in chars || c in extra) { 
      return true; 
     } 
     else { 
      chars[c] = 1; 
     } 
    } 
    return false; 
} 

var multiple = contains_multiple_chars(str, {'(': 1, ')': 1, '&': 1}); 

(我承認功能南e不適合)

+0

我用你的功能 - 它適合我最好的。謝謝! – Kalreg 2012-08-01 21:25:19

2

你只需要一個.*添加到您的前瞻。

(\w)(?=.*\1)|[()&] 

看到它here on regexr

我還添加了一個字符類的替代以包含您要求的字母()&

如果只希望,而不是\w字母(ASCII)使用字符類

([a-zA-Z])(?=.*\1)|[()&] 
+0

它工作在正則表達式,但不幸的是(我不知道爲什麼 - 它不工作在JavaScript。謝謝你試圖幫助 – Kalreg 2012-08-01 21:26:05