正则表达式检查& ()并重复字母

时间:2012-08-01 20:08:47

标签: javascript regex

我在javascript工作,想检查我的文字是否有一些迹象。我想检查一下我的文字是否有()和&字母或其中有重复的字母。一些例子:

  

测试 - 有多个t

     

tes& t - 有&

     

测试(测试) - 有(和),多个t和两个'e'字母

     

测试&(测试 - 有&和(以及多个t和e

     

test&(& t - 有多个t,多个&和(

     

tesra - 这个不适合任何模式

我已经做过类似的事了:

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

但是如果它们是一个接一个的话,它只计算多个标志,所以'teest'适合模式并且测试不会。有谁能够帮我?我永远无法理解所有这些正则表达式的功能:( 它可以分为两个正则表达式。

提前完成

2 个答案:

答案 0 :(得分:2)

您只需要向前瞻添加.*

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

here on regexr

我还添加了一个字符类替换,以包含您请求的字母()&

如果只想要字母(ASCII)而不是\w,请使用字符类

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

答案 1 :(得分: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});

(我承认功能名称不太合适)