JavaScript 嵌套 书名号 查询
字符串中查找嵌套书名号 ,一开始想用正则来做的,最后发现正则不可能达到我的需求(可能是我正则理解不够,哈哈),所以写下了这个方法:只做了三层,如果你要更多,可以自己添加,哈哈
//提取查询关键字,sourceData:要检索的字符串;startMarker:起始符号标记;endMarker:结束符号标记
function checkKeywordFromstr(str, startMarker, endMarker) {
let startMarkers = [];//存放所有起始标记的下标
let endMarkers = [];//存放所有结束标记的下标
//递归查找标记下标,存放到对应的数组中
(function iterator(start, end) {
//如果不存在标记,那么结束递归
if (start == -1 && end == -1) {
return;
} else {
//从字符串下标为零处查找或者从及找到下标的下一位开始查找
start = sourceData.indexOf(startMarker, start + 1);
end = sourceData.indexOf(endMarker, end + 1);
//将查找到的下标存入对应数组
startMarkers.push(start);
endMarkers.push(end);
iterator(start, end);//递归调用
}
})(0, 0);
let ret= "";//临时存放检索到的单个关键字
let rets = [];//存放检索到的关键字
//for循环,为每一个起始标记配对
for (let i = 0; i < startMarkers.length - 1; i++){
//如果标记嵌套大于一层
if (i + 1 < (startMarkers.length - 1) && startMarkers[i + 1] < endMarkers[i]){
//如果标记嵌套大于二层
if (i + 2 < (startMarkers.length - 1) && startMarkers[i + 2] < endMarkers[i + 1]){
//如果标记嵌套大于三层
if (i + 3 < (startMarkers.length - 1) && startMarkers[i + 3] < endMarkers[i + 2]){
ret = sourceData.slice(startMarkers[i], endMarkers[i + 3] + 1);
rets.push(ret);
i = i + 3;//起始标记数组下标后移三位
} else {
ret = sourceData.slice(startMarkers[i], endMarkers[i + 2] + 1);
rets.push(ret);
i = i + 2;
}
} else {
ret = sourceData.slice(startMarkers[i], endMarkers[i + 1] + 1);
rets.push(ret);
i = i + 1;
}
} else {
ret = sourceData.slice(startMarkers[i], endMarkers[i] + 1);
rets.push(ret);
}
}
return rets;
}
let str = '看《西游记》很开心,有这东西《人民共和国《阿萨》什么的》;还有《撒的《Safari》和《苏打粉》都是》';
checkKeywordFromstr(str,'《','》');
// ["《西游记》", "《人民共和国《阿萨》什么的》", "《撒的《Safari》和《苏打粉》都是》"]
JavaScript 嵌套 书名号 查询的更多相关文章
- Javascript实现Linq查询方式
Linq是.net平台一个重要的技术,全称Language Integrated Query.通过构建快速查询语句,可快速从数据库或集合中筛选数据集.以查询数据库相同的方式操作内存数据. 在ECMAS ...
- ylb:子查询(嵌套子查询)和子查询(相关子查询)
ylbtech-SQL Server:SQL Server-子查询(嵌套子查询)和子查询(相关子查询) SQL Server 子查询(嵌套子查询)和子查询(相关子查询). 1,ylb:1,子查询(嵌套 ...
- [SQL SERVER系列]之嵌套子查询和相关子查询
子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数:另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的 ...
- 百度地图JavaScript API经纬度查询-MAP
百度地图JavaScript API经纬度查询-MAP-ABCDEFGHIJKMHNOPQRSTUVWXYZ: 搜索:<input type="text" size=&quo ...
- 相关子查询和嵌套子查询 [SQL Server]
SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提,假设Books表如下: 类编号 图书名 出版社 价格-------------- ...
- 《数据库系统概念》4-DDL、集合运算、嵌套子查询
一.DDLa) SQL Data DefinitionSQL的基本数据类型有char(n).varchar(n).int.smallint.numeric(p,d).real,double preci ...
- SuperMap iClient for JavaScript 之关联查询
人们常说,计划赶不上变化.同样的,在项目中,使用的数据也是在不断变化的,尤其是属性信息的改变.就比如说,地图上的地物,它的空间信息在比较长的时间内,都不会发生变化,他的属性信息在初期不完整或者与后来的 ...
- SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)
SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...
- HTML(DOM)与JavaScript嵌套数组之间相互转换
html2ja:将html目标元素解析为JavaScript数组字面量,每项的值为tagName, className, id等CSS选择器组合: showJa:将html2ja生成的数组缩进格式化显 ...
随机推荐
- xshell有大量打印时,显示信息不全
使用xshell远程登录ssh时,编译大型工程或在minicom打印嵌入式设备的信息,发现显示不全. 在网上搜索了一下也没有发现有解决办法. 经过实验发现 xshell terminal type设置 ...
- Python字符串输入输出简述
字符串输入 Python用到的输入一般有两种方式,input() 和 raw_input() ,区别是,前者只能输入数字,后者输入的是字符串,使用如下: In [226]: help(input) H ...
- 16 Promise
Promise 特点 对象的状态不受外界影响.Promise对象代表一个异步操作,有三种状态:Pending(进行中).Resolved(已完成,又称Fulfilled)和Rejected(已失败). ...
- PostgreSQL
PostgreSQL新手入门 作者: 阮一峰 日期: 2013年12月22日 自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选. 本文介绍PostgreSQ ...
- Express4+Mongodb超简单入门实例
开始前,请确保mongodb已经能正常工作,安装教程:windows下MongoDB的安装及配置 , 请自行安装配置.下面进入正文: 第一步:命令行创建数据库.表,并插入一条数据 命令如下: //创建 ...
- 检查Linux服务器性能
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在? 概述通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. • uptime• ...
- df命令
http://www.th7.cn/system/lin/201311/46839.shtml http://www.111cn.net/sys/CentOS/86335.htm
- 严重: Error starting static Resources java.lang.IllegalArgumentException:
严重: Error starting static Resources java.lang.IllegalArgumentException: Document base E:\myworkspace ...
- 5天揭秘js高级技术-第二天
一.数组 1. 什么是数组? 数组就是一组数据的集合: 其表现形式就是内存中的一段连续的内存地址: 数组名称其实就是连续内存地址的首地址: 2. 关于js中的数组定义 数组定义无需指定数据类型: 数组 ...
- 【学习笔记】Struts2之配置处理结果
Action只是Struts2控制器的一部分,所以它不能直接生成对浏览者的响应.Action只负责生成响应的视图组件,通常是JSP页面,而Action会为JSP页面提供显示数据. Ac ...