首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在创建带有变量的RegExp对象时添加特殊字符

在创建带有变量的RegExp对象时添加特殊字符
EN

Stack Overflow用户
提问于 2014-06-10 15:49:06
回答 2查看 35关注 0票数 1

我还是个新手,我正在创建一个小函数,当输入文本框时,我会捡起对象并将它们添加到目录中。

我有一个文本框(id="commandBox")和一个启动函数'pickUp()‘的按钮。函数本身工作正常,但是当我使用数组索引创建RegExp对象时,我不知道如何正确地添加单词边界(\b)。目前,当数组索引为“pen”时,它也与“PENcil”和“sharPENer”中的“pen”匹配。如何正确地添加特殊字符?

这句话我有疑问。

代码语言:javascript
复制
objectList = new Array("pencil","pen","rubber","sharpener");
inventory = new Array();

function pickUp(){

var entry = document.getElementById("commandBox").value;
var resultBox = document.getElementById("result");

for(i=0;i<objectList.length;i++){
**objectSearch = new RegExp(objectList[i],"g");**
    if(inventory.indexOf(objectList[i])!=-1 && objectSearch.test(entry)==true ){
        resultBox.innerHTML = resultBox.innerHTML + "<br />You have already picked up the " + objectList[i];
        return;
    }else{
        if(objectSearch.test(entry)==true){
            resultBox.innerHTML = resultBox.innerHTML + "<br />You picked up a " + objectList[i];
            inventory.push(objectList[i]);
         }
      }
   }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-10 16:06:17

代码语言:javascript
复制
new RegExp("\\b" + objectList[i] + "\\b")

应该可以工作(您不需要g标志,因为您只是在运行test,而不是循环所有结果)。记得避开反斜杠.

另一方面,为什么不呢

代码语言:javascript
复制
if (objectList.indexOf(entry) > -1) {
    if (inventory.indexOf(entry) > -1) {
        ...
    } else {
        ...
    }
}

?如果需要处理条目中的多个项,只需将条目拆分为单个单词:

代码语言:javascript
复制
entries = entry.split(" ")

然后循环遍历这个数组:

代码语言:javascript
复制
for (var entry in entries) {
    if (objectList.indexOf(entry) > -1) {
        if (inventory.indexOf(entry) > -1) {
            ...
        } else {
            ...
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-06-10 16:06:09

如果我是您,我将尝试top,避免使用动态创建的regexes,并尝试更简单的方法。一种方法是编写一个简单的静态正则表达式,遍历每个单词,然后使用简单的字符串比较检查库存。

代码语言:javascript
复制
var reg = /\w+/g;
var result = null;
while(result = reg.exec(entry)){
    var word = result[0].toLowerCase();
    for(var i=0; i<objectList.length; i++){
        if( objectList[i].toLowerCase() === word){
            /*Found it!*/
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24145413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档