0%

JavaScript判断字符串是否包含某个片段的几种方式

除了indexOf外,还有那些方式呢?

indexOf & lastIndexOf (可以用于数组)

1
2
/* 使用indexOf判断,若返回-1则不包含,若包含则返回该片段第一次出现的位置(lastIndexOf返回最后一次出现的位置)。 */
"doubleam我爱你".indexOf("doubleam");
1
2
/* 使用search判断,若返回-1则不包含,若包含则返回该片段第一次出现的位置。原理:正则表达式 */
"doubleam我爱你".search("我爱你");

test (可以用于数组)

1
2
3
/* 使用正则表达式判断,若返回false则不包含,若包含则返回true。原理:正则表达式 */
/我爱你/.test("doubleam我爱你");
new RegExp("我爱你").test("doubleam我爱你");

match 与 exec

1
2
3
4
5
6
7
/* 
这两个方法返回找到的结果数组,用法不同。原理:正则表达式
match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
exec()方法用于检索字符串中的正则表达式的匹配。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
*/
/我爱你/.exec("doubleam我爱你");//return ["我爱你", index: 8, input: "doubleam我爱你", groups: undefined];
"doubleam我爱你我想你".match(/[我]/g);//return ["我", "我"];

ES6新增字符串扩展includes(可以用于数组)

1
2
//@return boolean
"doubleam我爱你我想你".includes("我爱你");//return true;

其他

也可以使用 'doubleam我爱你我想你'.split("我爱你"); 拆成数组通过长度来判断是否存在某个字符串片段,虽然不是很好用。

使用正则表达式限制不能输入空格 /^[\s\S]*.*[^\s][\s\S]*$/

bulb