检查单词是否存在两次? (正则表达式)

时间:2013-06-12 16:35:56

标签: javascript regex

我在Regex上很可怕,我想要的是检查一个字符串是否有两次单词http,例如:http://stackoverflow.com/questions/askhttp://stackoverflow.com/questions/ask,使用javascript中正则表达式的强大功能。

感谢。

5 个答案:

答案 0 :(得分:7)

/http.*http/

这是最简单的表达方式。这是http字符串中的任意位置,后跟零个或多个字符,后跟http

答案 1 :(得分:4)

虽然没有完全回答这个问题。为什么不将indexOf()与offset一起使用,如下所示:

var offset = myString.indexOf(needle);
if(myString.indexOf(needle, offset)){
   // This means string occours more than one time
}

indexOf比正则表达式更快。此外,它更少暴露于破坏代码的特殊字符。

答案 2 :(得分:2)

另一种方式,可以轻松扩展到n次或n

(inputString.match(/http/g) || []).length >= n

如果要将其扩展为任何文字字符串,可以在regex-escaping后使用RegExp构造函数和输入字符串:

(inputString.match(new RegExp(escapeRegex(needle), 'g')) || []).length >= n
为方便起见,

escapeRegex函数在这里复制:

function escapeRegex(input) {
    return input.replace(/[[\](){}?*+^$\\.|]/g, '\\$&');
}

答案 3 :(得分:2)

不需要正则表达式,您可以使用这样一个利用String.indexOf并执行字数统计的小功能。

编辑:也许“字数统计”是一个糟糕的描述,更好的是“模式匹配”

的Javascript

var testString = "http://stackoverflow.com/questions/askhttp://stackoverflow.com/questions/ask",
    testWord = "http";

function wc(string, word) {
    var length = typeof string === "string" && typeof word === "string" && word.length,
        loop = length,
        index = 0,
        count = 0;

    while (loop) {
        index = string.indexOf(word, index);
        if (index !== -1) {
            count += 1;
            index += length;
        } else {
            loop = false;
        }
    }

    return count;
}

console.log(wc(testString, testWord) > 1);

jsfiddle

答案 4 :(得分:0)

// this code check if http exists twice
"qsdhttp://lldldlhttp:".match(/http.*http/);