我目前有以下内容:
var sText = 'I like stackoverflow';
if ( $(this).text().match( eval("/" + sText + "/ig") ) ) {
如您所见,这与整个字符串匹配。
我需要匹配单独包含所有单词的不区分大小写的文本。所以它会寻找“我”,“喜欢”和“stackoverflow”。它必须包含所有3个单词。
非常感谢帮助。
答案 0 :(得分:1)
如果您真的需要使用匹配来执行此操作,则可以使用多个正向前瞻模式。例如,要按任意顺序匹配a
,b
和c
:
> p = /(?=.*a)(?=.*b)(?=.*c)/i
> 'abc'.match(p)
[""]
> 'cba'.match(p)
[""]
> 'ac'.match(p)
null
答案 1 :(得分:0)
为什么在.indexOf
完成工作时使用正则表达式?
var str = $(this).text().toLowerCase();
if (str.indexOf('i')>=0 && str.indexOf('like')>=0 && str.indexOf('stackoverflow')>=0) {
// ...
}
(请注意,在这种情况下,“i”搜索被浪费,因为它包含在“like”中,但我假设您的实际代码正在搜索更多普通文本。)
答案 2 :(得分:0)
你可以拆分然后循环 -
var sText = 'I like stackoverflow';
var cText = 'stackoverflow like I';
var arr = sText.split(' ');
var match = true;
for (i=0;i<arr.length;i++) {
if (!cText.match(eval("/" + arr[i] + "/ig"))) match= false;
}
alert(match);
如果你要比较很多单词,你需要记住效率。
答案 3 :(得分:0)
我认为这就是你要找的 - 关键是边界这个词。
var text = "text to match"
var stringToLookFor = "I like stackoverflow";
var words = stringToLookFor.split(" ");
var match=true;
$.each(words, function(index, word) {
if(!text.match(eval("/\\b" + word + "\\b/i"))) {
match=false;
return false;
}
});