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

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

写一个文表格过滤功能,需要在搜索框里输入过滤字符,没输一个字符动态搜索一次,还要忽略大小写,以方便使用。这里搜索功能需要用到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,哈哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值