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生成的数组缩进格式化显 ...
随机推荐
- input placeholder属性 样式修改(颜色,大小,位置)
placeholder属性 样式修改 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- RabbitMQ 集群+负载均衡
负载均衡 集群的配置已经搭建好了,代码也成功跑通,成功做到了高可用,但是我们的程序连接节点并不会管哪个服务器在忙.哪个服务器空闲,完全看心情想连谁就连谁.而且代码中要把每个ip的节点都手动的写出来 , ...
- JS操作Unicode编码的emoji表情显示在页面
前言:项目中用到了emoji表情,后端传递数据时直接是以Unicode形式,在页面总是无法展示,找尽各种方法总算是试出了一种,虽然达到效果但是并不是特别理解其中的原理并且无比笨拙,贴在这用作笔记,如果 ...
- 父子页面之间元素相互操作(iframe子页面)
js/jquery获取iframe子页面中元素的方法: 一.使用window.frames["iframe的ID"]获取元素 window.onload = function() ...
- Bootstrap模态框按钮
1.触发模态框弹窗的代码 这里复制了一段Bootstrap模态框的代码 <h2>创建模态框(Modal)</h2> <!-- 按钮触发模态框 --> <but ...
- [Unreal]学习笔记001
常规 为了便于控制,创建自己的Gamemode和Controller,再通过Setting->World Setting进行设置 在场景中,按住鼠标右键来移动视角,按住右键的同时按下W/S,控制 ...
- iOS 判断网络连接状态的几种方法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 } p.p2 ...
- 手机端页面自适应之rem布局
W3C官网上是这样描述rem的--"font size of the root element" . rem布局在移动端发挥的比较好. 阿里团队高清方案: <script&g ...
- 第三章 --- 关于Javascript 设计模式 之 代理模式
第一.定义: 代理模式是为一个对象提供代用品或者占位符,以便控制对它的访问. 比如说,某男生小明想向他的女神 A 表白,刚好小明认识的一个女生B 和 女神A 是好朋友,那么小明就想让 女生B 帮忙送花 ...
- 关于MapReduce中自定义分区类(四)
MapTask类 在MapTask类中找到run函数 if(useNewApi){ runNewMapper(job, splitMetaInfo, umbilical, reporter ...