关于检索关键字的常用四种方法
在前端开发过程中,我们经常会遇到关于检索关键词的问题。遇到这类问题,我们通常会用下面的四个方法来解决检索关键词的问题:
1.检索一个固定的关键词:
1.1 String.prototype.indexOf()-->indexOf()
方法返回指定值在字符串对象中首次出现的位置。从 fromIndex
位置开始查找,如果不存在,则返回 -1。
语法:
str.indexOf(searchValue[, fromIndex])
参数:
searchValue
一个字符串表示被查找的值。
fromIndex 可选
可选表示调用该方法的字符串中开始查找的位置。可以是任意整数。默认值为 0。如果 fromIndex < 0
则查找整个字符串(如同传进了 0)。如果 fromIndex >= str.length
,则该方法返回 -1,除非被查找的字符串是一个空字符串,此时返回 str.length。
描述:
字符串中的字符被从左向右索引。首字符的索引(index)为 0,字符串 stringName
的最后一个字符的索引是 stringName.length - 1
。
"Blue Whale".indexOf("Blue"); // returns 0
"Blue Whale".indexOf("Blute"); // returns -1
"Blue Whale".indexOf("Whale", 0); // returns 5
"Blue Whale".indexOf("Whale", 5); // returns 5
"Blue Whale".indexOf("", 9); // returns 9
"Blue Whale".indexOf("", 10); // returns 10
"Blue Whale".indexOf("", 11); // returns 10
区分大小写
indexOf
方法区分大小写。例如,下面的表达式返回 -1:
"Blue Whale".indexOf("blue") // returns -1
检测是否存在某字符串
当检测某个字符串是否存在于另一个字符串中时,可使用下面的方法:
"Blue Whale".indexOf("Blue") !== -1; // true
"Blue Whale".indexOf("Bloe") !== -1; // false
1.2 String.prototype.indexOf()-->lastIndexOf()方法返回调用字符串中的索引对象指定的最后出现的位置,从fromIndex向后搜索。如果没有找到该值返回-1。
语法:
str.lastIndexOf(searchValue[, fromIndex])
参数:
searchValue
一个字符串表示被查找的值。
fromIndex 可选
可选表示调用该方法的字符串中开始查找的位置。可以是任意整数。默认值为 0。如果 fromIndex < 0
则查找整个字符串(如同传进了 0)。如果 fromIndex >= str.length
,则该方法返回 -1,除非被查找的字符串是一个空字符串,此时返回 str.length。
描述:
字符串中的字符被从左向右索引。首字符的索引(index)为 0,字符串 stringName
的最后一个字符的索引是 stringName.length - 1
。
'canal'.lastIndexOf('a'); // returns 3
'canal'.lastIndexOf('a', 2); // returns 1
'canal'.lastIndexOf('a', 0); // returns -1
'canal'.lastIndexOf('x'); // returns -1
'canal'.lastIndexOf('c', -5); // returns 0
'canal'.lastIndexOf('c', 0); // returns 0
'canal'.lastIndexOf(''); // returns 5
'canal'.lastIndexOf('', 2); // returns 2
区分大小写
lastindexOf
方法区分大小写。例如,下面的表达式返回 -1:
'Blue Whale, Killer Whale'.lastIndexOf('blue'); // returns -1
2.检索有没有相应关键字:
String.prototype.search()-->String.prototype.search()方法执行一个搜索匹配正则表达式字符串对象。
语法:
str.search(regexp)
参数:
regexp
该参数可以是需要在 stringObject 中检索的子串,也可以是需要检索的 RegExp 对象。
注释:要执行忽略大小写的检索,请追加标志 i。
说明
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。
实例
function testinput(re, str) {var midstring;if (str.search(re) != -1) {midstring = ' contains ';} else {midstring = ' does not contain ';}console.log(str + midstring + re);
}
search()方法对大小写敏感 :
<script type="text/javascript">var str="Visit W3School!"
document.write(str.search(/w3school/))//输出-1</script>
在本例中,我们将执行一次忽略大小写的检索:
<script type="text/javascript">var str="Visit W3School!"
document.write(str.search(/w3school/i))//输出为6</script>
3.检索所有关键词的内容:
String.prototype.match()-->match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
语法:
str.match(regexp)
参数:
searchvalue | 必需。规定要检索的字符串值。 |
regexp | 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。 |
返回值
存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
说明
match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。
注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
实例
<script type="text/javascript">var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g))//输出1,2,3</script>
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
4.既可以找到关键字的位置,又可以返回关键字的位置:
RegExp.prototype.exec()-->exec() 方法
为指定的一段字符串执行搜索匹配操作。它的返回值是一个数组或者 null
。 如果你仅仅是为了知道是否匹配,可以使用 RegExp.test()
方法,或者 String.search()
方法。
语法
regexObj.exec(str)
参数
str
要用正则表达式匹配的字符串。
返回值
如果成功匹配,exec
方法返回一个数组,并且更新正则表达式对象的属性。返回的数组包括匹配的字符串作为第一个元素,紧接着一个元素对应一个成功匹配被捕获的字符串的捕获括号(capturing parenthesis)。(one item for each capturing parenthesis that matched containing the text that was captured.)
如果匹配失败,exec
方法将返回 null
。
描述
// Match "quick brown" followed by "jumps", ignoring characters in between
// Remember "brown" and "jumps"
// Ignore case
var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
下面的表格展示这个脚本的返回值:
对象 | 属性/索引 | 描述 | 例子 |
result
|
[0]
|
匹配的全部字符串 | Quick Brown Fox Jumps |
[1], ...[n]
|
括号中的分组捕获 |
[1] = Brown [2] = Jumps |
|
index
|
匹配到的字符位于原始字符串的基于0的索引值 |
4
|
|
input
|
原始字符串 | The Quick Brown Fox Jumps Over The Lazy Dog | |
re
|
lastIndex
|
下一次匹配开始的位置 |
25
|
ignoreCase
|
是否使用了'i'标记使正则匹配忽略大小写 |
true
|
|
global
|
是否使用了'g'标记来进行全局的匹配. |
true
|
|
multiline
|
是否使用了' |
false
|
|
source
|
正则模式的字符串 | quick\s(brown).+?(jumps) |
实例
<script type="text/javascript">var str = "Visit W3School";
var patt = new RegExp("W3School","g");
var result;while ((result = patt.exec(str)) != null) {document.write(result);//输出W3Schooldocument.write("<br />");document.write(patt.lastIndex);//输出14}
</script>
注意:不要把正则表达式字面量(或者正则表达式构造器)放在 while
条件表达式里。由于每次迭代时 lastIndex
的属性都被重置,如果匹配,将会造成一个死循环。
关于检索关键字的常用四种方法相关推荐
- 创建JSONArray的常用四种方法
创建JSONArray的常用四种方法 1.从头或者从零开始,创建一个JSONArray(Creating a JSONArray from scratch) 实例1: Java代码 JSONA ...
- 清除浮动最常用的四种方法
1.为什么要清除浮动 开发过程中,浮动是需要掌握的一个技能,页面布局当中,在无法确定子元素的高度(height)时,我们无法给父级标签一个固定的高度(height),我们想要的是,由子元素的高度去控制 ...
- PHP取整数函数常用的四种方法
PHP取整数函数常用的四种方法: 1.直接取整,舍弃小数,保留整数:intval(): 2.四舍五入取整:round(): 3.向上取整,有小数就加1:ceil(): 4.向下取整:floor( ...
- Hutool常用四种发起请求的方法
Hutool常用四种发起请求的方法 导入jar包,可以直接去搜索hutool官方查看最新版本和使用文档. <!-- https://mvnrepository.com/artifact/cn.h ...
- JSP页面中常用四种标签
JSP页面常用四种标签: 1. EL表达式: ${} 2. jstl表达式(sun apache): <%@ taglib prefix="c" uri="htt ...
- 微信群聊删掉服务器有保存,教你四种方法快速恢复找回删除退出的微信群
原标题:教你四种方法快速恢复找回删除退出的微信群 微言∶"玩微信这么多年谁还没几个群呢,但有时忘记将群加入通讯录,还一个手贱把群聊记录删了,怎么也找不到聊天群入口这可怎么办?" 还 ...
- 详解Java解析XML的四种方法
http://developer.51cto.com 2009-03-31 13:12 cnlw1985 javaeye 我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...
- PHP怎么读写XML?(四种方法)
PHP怎么读写XML?(四种方法) 一.总结 1.这四种方法中,字符串的方式是最原始的方法.SimpleXML和DOM扩展是属于基于树的解析器,把整个文档存储为树的数据结构中,需要把整个文档都加载到内 ...
- 四种方法使Map线程安全
四种方法使Map线程安全 如果需要使 Map 线程安全,大致有这么四种方法: 1.使用 synchronized 关键字,这也是最原始的方法.代码如下 synchronized(anObject) { ...
- 使用Spring Security3的四种方法概述
使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...
最新文章
- ROS学习(七):ROS launch 文件
- 【UAV】陀螺仪数据分析,以维特智能 JY901B 为例
- 【webservice】spring整合webservice RS风格
- python 科学计算及数据可视化
- mysql xa_Mysql对XA的支持
- SecureCRT设置
- 【Decision Tree】林轩田机器学习技法
- CGI与JSP联系与区别
- Java程序发生异常就挂了吗?
- 静态代码分析工具大全
- Linux进程间通信-消息队列
- windows server2008r2 下载
- mzy git学习,删除文件(三)
- 三国史诗——三国官制(二)
- thinkphp6如何部署在虚拟主机上?
- 语句摘抄——第19周
- Android应用开发编译框架流程与IDE及Gradle概要
- 解决Intellij IDEA 一直在indexing,清除缓存后重启无效,手动清除缓存
- 17 -> 详解 openWRT 的 gpio 配置关系说明
- 中国城市码cityCode映射
热门文章
- 冰点还原8.53破解版
- C++银行账户管理程序1
- android als传感器,环境光传感器(ALS)背光控制系统解决方案
- 哇塞!这是我见过的最牛逼的性能监控系统,集强大功能于一身~
- [原]极域电子教室3个没被发现的bug(V6 2007)
- android 播放资源mp4,Android播放assets文件里视频文件相关问题分析
- 顺丰同城快递预下单接口
- 圣诞节苹果服务器没有人维护2020,2020圣诞节真的推迟到1月8号吗
- 词根词缀 按字母划分
- C++ 调用Asprise OCR识别图片中的文字