如何在javascript中检查字符串是否包含WORD?

How to check if a string contains a WORD in javascript?

本问题已经有最佳答案,请猛点这里访问。

因此,可以使用.includes()方法轻松检查字符串是否包含特定的子字符串。

我想知道一个字符串是否包含一个词。

例如,如果我为字符串"phones are good"应用"on"搜索,它应该返回false。而且,它应该返回真的"放在桌子上"。


首先需要使用split()将其转换为数组,然后使用includes()

1
string.split("").includes("on")

只需要把空白的""传给split()就可以得到所有的单词。


你可以用空格(\s+把你的字符串.split塞进Set中,然后用.has检查字符串集是否包含你的字:

1
2
3
4
5
const hasWord = (str, word) =>
  ((s) => s.has(word))(new Set(str.split(/\s+/)))
 
console.log(hasWord("phones are good","on"));
console.log(hasWord("keep it on the table","on"));

如果您担心标点符号,可以先使用.replace(如本答案所示),然后使用split删除标点符号:

1
2
3
4
5
const hasWord = (str, word) =>
  ((s) => s.has(word))(new Set(str.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"").split(/\s+/)))
 
console.log(hasWord("phones are good","on"));
console.log(hasWord("keep it on, the table","on"));


这被称为regex-正则表达式

你可以使用101regex网站,当你需要解决他们(它有帮助)。带有自定义分隔符的单词。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function checkWord(word, str) {
  const allowedSeparator = '\\\s,;"\'|';

  const regex = new RegExp(
    `(^.*[${allowedSeparator}]${word}$)|(^${word}[${allowedSeparator}].*)|(^${word}$)|(^.*[${allowedSeparator}]${word}[${allowedSeparator}].*$)`,

    // Case insensitive
    'i',
  );
 
  return regex.test(str);
}

[
  'phones are good',
  'keep it on the table',
  'on',
  'keep iton the table',
  'keep it on',
  'on the table',
  'the,table,is,on,the,desk',
  'the,table,is,on|the,desk',
  'the,table,is|the,desk',
].forEach((x) => {
  console.log(`Check: ${x} : ${checkWord('on', x)}`);
});

说明:

我在这里为每个可能创建多个捕获组:

最后一个词是(^.*\son$)on

(^on\s.*)on是第一个词

只有一个词是(^on$)on

(^.*\son\s.*$)on是一个中间字。

\s表示空间或新行

1
2
3
4
5
6
7
8
const regex = /(^.*\son$)|(^on\s.*)|(^on$)|(^.*\son\s.*$)/i;

console.log(regex.test('phones are good'));
console.log(regex.test('keep it on the table'));
console.log(regex.test('on'));
console.log(regex.test('keep iton the table'));
console.log(regex.test('keep it on'));
console.log(regex.test('on the table'));


一个简单的版本可能只是在空白处进行拆分,并在结果数组中查找单词:

1
2
3
"phones are good".split("").find(word => word ==="on") // undefined

"keep it on the table".split("").find(word => word ==="on") //"on"

不过,这只是按空白分割,当需要解析文本(取决于您的输入)时,您会遇到比空白更多的单词分隔符。在这种情况下,可以使用regex来解释这些字符。比如:

1
"Phones are good, aren't they? They are. Yes!".split(/[\s,\?\,\.!]+/)


您可以拆分,然后尝试查找:

1
2
3
const str = 'keep it on the table';
const res =  str.split(/[\s,\?\,\.!]+/).some(f=> f === 'on');
console.log(res);

此外,some方法非常有效,因为如果任何谓词为真,它将返回true。


您可以使用.includes()并检查单词。要确保它是一个单词而不是另一个单词的一部分,请确认找到它的位置后面跟有空格、逗号、句点等,并且前面也有一个。


尝试以下操作-

1
2
3
4
5
6
7
8
var mainString = 'codehandbook'
var substr = /hand/
var found = substr.test(mainString)
if(found){
  console.log('Substring found !!')
} else {
  console.log('Substring not found !!')
}


使用Array.prototype.includes。https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_对象/array/includes

1
2
console.log("keep it on the table".toLowerCase().split("").includes("on")); // true
console.log("phones are good".toLowerCase().split("").includes("on")); // false

或者可以使用正则表达式。


我将遵循以下假设:

  • 单词句子的开头总是有一个尾随空格。
  • 句子末尾的单词总是有前导空格。
  • 句子中间的单词总是有一个前后空格。
  • 因此,我将编写以下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    function containsWord(word, sentence) {
        return (
           sentence.startsWith(word.trim() +"") ||
           sentence.endsWith("" + word.trim()) ||
           sentence.includes("" + word.trim() +""));
    }

    console.log(containsWord("test","This is a test of the containsWord function."));