1

我对正则表达式很糟糕,我想要检查一个字符串是否有两次 http 一词,例如:http://stackoverflow.com/questions/askhttp://stackoverflow.com/questions/ask,使用 javascript 中正则表达式的真棒功能。

谢谢。

4

5 回答 5

8
/http.*http/

是执行此操作的最简单表达式。那是http字符串中的任何位置,后跟零个或多个字符,后跟http.

于 2013-06-12T16:37:51.030 回答
4

虽然没有完全回答这个问题。为什么不使用带有偏移量的 indexOf(),如下所示:

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

indexOf 比正则表达式更快。此外,它不太容易受到破坏代码的特殊字符的影响。

于 2013-06-12T16:45:03.297 回答
2

另一种方式,可以很容易地扩展到更多n次或完全n次:

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

如果要将其扩展为任何文字字符串,可以在regex-escapingRegExp之后将构造函数与输入字符串一起使用:

(inputString.match(new RegExp(escapeRegex(needle), 'g')) || []).length >= n

escapeRegex为方便起见,此处复制的功能:

function escapeRegex(input) {
    return input.replace(/[[\](){}?*+^$\\.|]/g, '\\$&');
}
于 2013-06-12T16:48:24.983 回答
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 上

于 2013-06-12T17:17:03.513 回答
0
// this code check if http exists twice
"qsdhttp://lldldlhttp:".match(/http.*http/);
于 2013-06-12T16:40:12.493 回答