如何在 JavaScript 变量中检查文本是否存在

3
我将翻译以下内容:

我有一个包含一些文本的变量。我想检查这些文本中是否有某个单词。

例如:

var myString = 'This is some random text';

我想检查单词“random”是否存在。感谢任何帮助。
3个回答

6

如果您想特别测试单词“random”,您可以使用以下正则表达式:

示例:http://jsfiddle.net/JMjpY/

var myString = 'This is some random text';
var word = 'random';
var regex = new RegExp( '\\b' + word + '\\b' );

var result = regex.test( myString );

这样就不会匹配包含"random"的单词,例如"randomize"。


当然,如果你愿意,也可以将其原型化为String:

示例:http://jsfiddle.net/JMjpY/1/

String.prototype.containsWord = function( word ) {
    var regex = new RegExp( '\\b' + word + '\\b' );
    return regex.test( this );
};

myString.containsWord( "random" );

我一直在使用这个,但它似乎无法处理某些字符,例如:-5度(带负号返回false)。有什么解决办法吗? - Ricky
@Ricky:你可以使用 new RegExp( '\\s|\\b' + word + '\\s|\\b' );,但是如果字符串包含 -5 degrees,那么搜索 5 degrees 时将会得到一个正结果。 - user113716
现在似乎总是返回 true。 - Ricky
1
@Ricky:我忘记把它们分组了。new RegExp( '(\\s|\\b)' + word + '(\\s|\\b)' ) - user113716

5
您可以使用独立的函数来完成此操作:
function contains(str, text) {
   return str.indexOf(text) >= 0);
}

if(contains(myString, 'random')) {
   //myString contains "random"
}

或者通过原型扩展:

String.prototype.contains = String.prototype.contains || function(str) {
   return this.indexOf(str) >= 0;
}

if(myString.contains('random')) {
   //myString contains "random"
}

如果搜索的单词是文本的第一个单词,则使用>= 0忽略它。如果没有找到任何内容,indexOf_将返回-1_。 - Xavier Boubert

2

关于Jacob的问题,'contains'函数中缺少一个左括号。

return str.indexOf(text) >= 0);

应该是

return (str.indexOf(text) >= 0);

我选择了Patrick的答案,并将其改编成了一个函数

示例

function InString(myString,word)
    {
    var regex = new RegExp( '\\b' + word + '\\b' );
    var result = regex.test( myString );
    return( result );
    }
调用函数
var ManyWords='This is a list of words';
var OneWord='word';
if (InString(ManyWords,OneWord)){alert(OneWord+' Already exists!');return;}

这会返回False,因为虽然变量ManyWords中存在'words',但此函数仅显示'word'的精确匹配

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接