使用变量创建RegExp对象时添加特殊字符

时间:2014-06-10 15:49:06

标签: javascript regex

我还是新手,我正在创建一个小功能,可以在文本框中输入对象并将其添加到库存中。

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

我有问题。

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]);
         }
      }
   }
}

2 个答案:

答案 0 :(得分:2)

new RegExp("\\b" + objectList[i] + "\\b")

应该有效(你不需要g标志,因为你只是test而不是循环遍历所有结果)。 请记住逃避反斜杠。


另一方面,为什么不呢

if (objectList.indexOf(entry) > -1) {
    if (inventory.indexOf(entry) > -1) {
        ...
    } else {
        ...
    }
}

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

entries = entry.split(" ")

然后遍历该数组:

for (var entry in entries) {
    if (objectList.indexOf(entry) > -1) {
        if (inventory.indexOf(entry) > -1) {
            ...
        } else {
            ...
        }
    }
}

答案 1 :(得分:1)

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

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!*/
        }
    }
}