我在Regex上很可怕,我想要的是检查一个字符串是否有两次单词http,例如:http://stackoverflow.com/questions/askhttp://stackoverflow.com/questions/ask
,使用javascript中正则表达式的强大功能。
感谢。
答案 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);
上
答案 4 :(得分:0)
// this code check if http exists twice
"qsdhttp://lldldlhttp:".match(/http.*http/);