Kafka linux 微信小程序 mAPI authentication magento dynamic dll joomla vue部署 jquery通过class获取元素 ajax的get请求 python查看数据类型 grep不是内部命令 java清空数组 docker查看所有容器 完美解决cpu利用率低 mysql 导入数据 python环境搭建 python编程题 python正则表达式例子 python写入txt文件 python模块大全 java斐波那契数列 java编程实例 java环境安装 javafloat java日期类 java获取当前线程 java的输入 马赛克软件 思源黑体cn 3d软件下载 电脑基础 黑市商人 联发科mt6750 phpword python列表求和 沉沦之城 类似迅雷的下载软件
当前位置: 首页 > 学习教程  > 编程语言

【JS 学习笔记】【字符串处理】search() 函数的注意点

2020/9/19 13:32:20 文章标签:

备注:学习笔记会反复修改更新

写一个文表格过滤功能,需要在搜索框里输入过滤字符,没输一个字符动态搜索一次,还要忽略大小写,以方便使用。这里搜索功能需要用到search()函数。

其实刚开始用的是indexOf()函数,但它只能搜索写死的字符串,不能动态识别大小写。查了下search()  (W3C 说明 - search()), 它既可以搜索指定字符串,也就是indexOf()的功能,也可以搜索正则表达式,有点高级,于是我写了下面的代码:

// 定义一个关键字,字符串 userInputString 是用户动态输入的
var filter = userInputString;
// 在 SourceString 中搜索关键字 filter
var position = String(SourceString).search('/' + filter + '/i') ;

但发现不对,总是返回 -1。咦?这是哪里出了问题?于是又翻了翻说明(MDN 说明 - search() 函数),发现人家的正则表达式好像需要单独定义一个变量,于是又翻了翻正则表达式的说明(MDN 说明 - 正则表达式 RegExp)。原来JS里正则表达式要如下写才有效:

var re = /ab+c/i; // literal notation
var re = new RegExp('ab+c', 'i') // constructor with string pattern as first argument
var re = new RegExp(/ab+c/, 'i') // constructor with regular expression literal as first argument

re不带引号就对了,带了就错了,也就是说得是个正则变量,不能是字符串变量。所以,我把自己的代码改成了:

// 定义一个关键字,字符串 userInputString 是用户动态输入的
var filter = userInputString;
// 定义一个正则表达式变量re, 把filter 变成一个正则表达式。参数i表示忽略大小写。 
let re = new RegExp(filter, 'i');
// 在 SourceString 中搜索关键字 re, 也就是filter
var position = String(SourceString).search(re);

然后就搜索成功了,消灭了返回值-1,哈哈~


本文链接: http://www.dtmao.cc/news_show_200012.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?