2

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

测试- 有多个 t

测试&t - 有 &

test(test) - 有 ( and ), 多个 t 和两次 'e' 字母

test&(test - 有 & 和 ( 以及多个 t 和 e

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

tesra - 这个不适合任何模式

我已经做了这样的事情:

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

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

提前感谢

4

2 回答 2

2

您只需要在.*前瞻中添加一个。

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

在 regexr 上查看

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

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

([a-zA-Z])(?=.*\1)|[()&]
于 2012-08-01T20:26:39.677 回答
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});

(我承认函数名不太合适)

于 2012-08-01T20:26:57.800 回答