如何正确检查字符串是否不包含特定单词?
How can I correctly check if a string does NOT contain a specific word?
我目前正在尝试找出解决上述问题的方法。
具体来说,我想检查字符串是否 not 包含大写和小写字母的单词 "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
None 这些变体似乎对我有用。谁能给我一个提示,这里有什么问题?我以前多次使用 indexOf
方法,但总是在我想检查字符串是否包含特定单词时使用,而不是相反。
indexOf()
是正确的方法,通过在测试前使用 [=12= 强制测试字符串为小写或大写,可以轻松解决大小写问题] 或 .toUpperCase()
:
const lookupValue = "stream";
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.";
function testString(testData, lookup){
return testData.toLowerCase().indexOf(lookup) === -1;
}
function prettyPrint(yesNo){
return "The string does" + (yesNo ? " NOT" : "") + " contain \"stream\" in some form."
}
console.log(prettyPrint(testString(testString1, lookupValue)));
console.log(prettyPrint(testString(testString2, lookupValue)));
我建议使用 String+toLowerCase
and check with String#indexOf
,因为它适用于所有浏览器。
if (gewaesser_name1.toLowerCase().indexOf("stream") === -1 && gewaesser_name2.toLowerCase().indexOf("stream") === -1) {
var a = "..."
}
这是您可以在正则表达式中执行的操作:
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) ))
您可能希望将 include() 的返回结果与严格相等的操作数进行比较,=== false 或 === true,这是更好的做法,但实际上并不需要这样做,看起来您可能会受益从知道比较布尔值到字符串的不同是一件奇怪的事情。我也不会检查 "Stream" 和 "stream" 尝试使用 toLowerCase() 而不是像这样, var str1_check = gewaesser_name1.toLowerCase();
我会使用小写 "stream" 检查流,因为你的新字符串都是小写的,而且你希望它们与你的初始变量分开,因为你可能不希望强制使用这些名称小写。我将使用 str1_check.includes("stream") 检查此字符串中是否包含字符串 "stream",因为此结果是真还是假,您可以像这样执行检查。
if(str1_check.includes("stream")) {
//this string contained stream
}
我看起来你的 if 逻辑是如果名字不包含 "stream" 或者名字 1 和 2 不包含流但是你检查名字 1 小写 "stream" 和名字 2大写 "stream"。看起来你只是希望两个名称都不包含流,这样可以更容易地执行。
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
}
我更愿意像这样使用 javascript 正则表达式:
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));
感谢大家的快速反馈,代码现在 运行 非常好!
我正在使用以下代码:
`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"}
`
我目前正在尝试找出解决上述问题的方法。 具体来说,我想检查字符串是否 not 包含大写和小写字母的单词 "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
None 这些变体似乎对我有用。谁能给我一个提示,这里有什么问题?我以前多次使用 indexOf
方法,但总是在我想检查字符串是否包含特定单词时使用,而不是相反。
indexOf()
是正确的方法,通过在测试前使用 [=12= 强制测试字符串为小写或大写,可以轻松解决大小写问题] 或 .toUpperCase()
:
const lookupValue = "stream";
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.";
function testString(testData, lookup){
return testData.toLowerCase().indexOf(lookup) === -1;
}
function prettyPrint(yesNo){
return "The string does" + (yesNo ? " NOT" : "") + " contain \"stream\" in some form."
}
console.log(prettyPrint(testString(testString1, lookupValue)));
console.log(prettyPrint(testString(testString2, lookupValue)));
我建议使用 String+toLowerCase
and check with String#indexOf
,因为它适用于所有浏览器。
if (gewaesser_name1.toLowerCase().indexOf("stream") === -1 && gewaesser_name2.toLowerCase().indexOf("stream") === -1) {
var a = "..."
}
这是您可以在正则表达式中执行的操作:
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) ))
您可能希望将 include() 的返回结果与严格相等的操作数进行比较,=== false 或 === true,这是更好的做法,但实际上并不需要这样做,看起来您可能会受益从知道比较布尔值到字符串的不同是一件奇怪的事情。我也不会检查 "Stream" 和 "stream" 尝试使用 toLowerCase() 而不是像这样, var str1_check = gewaesser_name1.toLowerCase();
我会使用小写 "stream" 检查流,因为你的新字符串都是小写的,而且你希望它们与你的初始变量分开,因为你可能不希望强制使用这些名称小写。我将使用 str1_check.includes("stream") 检查此字符串中是否包含字符串 "stream",因为此结果是真还是假,您可以像这样执行检查。
if(str1_check.includes("stream")) {
//this string contained stream
}
我看起来你的 if 逻辑是如果名字不包含 "stream" 或者名字 1 和 2 不包含流但是你检查名字 1 小写 "stream" 和名字 2大写 "stream"。看起来你只是希望两个名称都不包含流,这样可以更容易地执行。
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
}
我更愿意像这样使用 javascript 正则表达式:
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));
感谢大家的快速反馈,代码现在 运行 非常好!
我正在使用以下代码:
`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"}
`