我对正则表达式很糟糕,我想要检查一个字符串是否有两次 http 一词,例如:http://stackoverflow.com/questions/askhttp://stackoverflow.com/questions/ask
,使用 javascript 中正则表达式的真棒功能。
谢谢。
我对正则表达式很糟糕,我想要检查一个字符串是否有两次 http 一词,例如:http://stackoverflow.com/questions/askhttp://stackoverflow.com/questions/ask
,使用 javascript 中正则表达式的真棒功能。
谢谢。
/http.*http/
是执行此操作的最简单表达式。那是http
字符串中的任何位置,后跟零个或多个字符,后跟http
.
虽然没有完全回答这个问题。为什么不使用带有偏移量的 indexOf(),如下所示:
var offset = myString.indexOf(needle);
if(myString.indexOf(needle, offset)){
// This means string occours more than one time
}
indexOf 比正则表达式更快。此外,它不太容易受到破坏代码的特殊字符的影响。
另一种方式,可以很容易地扩展到更多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, '\\$&');
}
不需要正则表达式,您可以使用这样的小函数,它利用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);
// this code check if http exists twice
"qsdhttp://lldldlhttp:".match(/http.*http/);