如何正确检查字符串是否包含特定单词?

时间:2016-12-20 22:35:53

标签: javascript string if-statement indexof contain

我目前正试图弄清楚如何解决上述问题。 具体来说,我想检查字符串是否包含大写和小写字母“stream”一词。

到目前为止,这是我的代码:

if (((gewaesser_name1.includes("Stream") == "false") ||
(gewaesser_name1.includes("stream") == "false")) &&
((gewaesser_name2.includes("Stream") == "false") ||
(gewaesser_name2.includes("stream") == "false")))
{var a= "..."}

代码确实不起作用,因为结果不是我期望的结果。 在使用以下语法变体之前,我还尝试使用indexOf方法:

gewaesser_name2.indexOf("stream") == -1
gewaesser_name2.indexOf("stream") < 0

这些变化似乎都不适合我。有人可以给我一个暗示这里有什么问题吗?我之前多次使用indexOf方法,但总是在我想检查一个字符串是否包含特定单词时,而不是反过来。

6 个答案:

答案 0 :(得分:7)

我建议使用String+toLowerCase并查看String#indexOf,因为它适用于所有浏览器。

if (gewaesser_name1.toLowerCase().indexOf("stream") === -1 && gewaesser_name2.toLowerCase().indexOf("stream") === -1) {
    var a = "..."
}

答案 1 :(得分:3)

indexOf() 是正确的方法,通过在测试前使用.toLowerCase()或{{1强制测试字符串为大写或小写,可以轻松解决案例问题}}:

.toUpperCase()

答案 2 :(得分:1)

感谢快速反馈人员,代码现在运行得非常好!

我使用以下代码:

`if      (gewaesser_name1.toLowerCase().indexOf("stream") === -1 && gewaesser_name2.toLowerCase().indexOf("stream") === -1) 
         {var a = "does NOT contain stream"}

 else    {var a= "does contain stream"}

`

答案 3 :(得分:0)

这是你可以在正则表达式中执行的操作:

&#13;
&#13;
const testString1 = "I might contain the word StReAm and it might be capitalized any way.";
const testString2 = "I might contain the word steam and it might be capitalized any way.";
const re = /stream/i
console.log( !!(testString1.match(re) ));
console.log( !!(testString2.match(re) ))
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可能希望将include()的返回结果与严格相等的操作数进行比较,=== false或=== true,这是更好的练习,但不是真的需要,只是看起来你可能会从中受益将boolean与字符串进行比较的不同之处是奇怪的事情。我也不会检查“Stream”和“stream”尝试使用toLowerCase()而不是这样,var str1_check = gewaesser_name1.toLowerCase();

我使用小写的“stream”检查流,因为你的新字符串都是小写的,你也希望它们与你的初始变量分开,因为你可能不希望这些名字被强制为小写。我使用str1_check.includes(“stream”)来检查这个字符串中是否包含字符串“stream”,因为这个结果是真实的或者是假的,你可以像这样执行检查。

if(str1_check.includes("stream")) {
//this string contained stream
}

如果第一个名称不包含“stream”,或者名称1和2不包含流,但是您的检查名称1包含小写“stream”,名称2包含大写“stream”,我看起来像你的if逻辑。看起来你只想要两个名字都不包含流,这样可以更容易地执行。

var str1_check = gewaesser_name1.toLowerCase(),
str2_check = gewaesser_name2.toLowrCase();//this way you're not making        multiple toLowerCase calls in your conditional and maintain the state of your two names.

if(!str1_check.includes("stream") && !str2_check.includes("stream")){
//your code on truthey statement
}

答案 5 :(得分:0)

我更喜欢使用这样的javascript RegExp:

function includesMatch(lookupValue, testString){
    var re = new RegExp(lookupValue, 'i'); //Here the 'i' means that we are doing a case insensitive match
    return testString.match(re) !== null
}

var lookup = "stream";
var test1  = "do I have a StrEAm in me?";
var test2  = "well at least I don't";
console.log(includesMatch(lookup, test1));
console.log(includesMatch(lookup, test2));