2012-08-01 160 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