在javascript中使用正则表达式时的不同行为

时间:2014-12-30 00:05:24

标签: javascript regex

我使用javascript和正则表达式扫描特定单词的句子(' schiz')然后返回匹配以及我查询的单词前后的5个单词。

但是,我似乎遇到了一个奇怪的情况,那就是"新的Regexp()"对象的行为与仅使用普通正则表达式相同。

在以下代码中,如果我使用:

reg = /([^\s]+\s){0,5}schiz([^\s]+\s){0,5}/g

然后它按预期返回,但由于我需要查询字作为变量,我需要使用" new regexp()"创建我的正则表达式。

reg = RegExp("([^\s]+\s){0,5}"+query+"([^\s]+\s){0,5}","g");

如果查询是" schiz",没有给出相同的结果,有人可以解释为什么会这样吗? 以下是整个代码段:

    var matchItem = "<p><strong>Indications</strong></p>&#10;<p>- Used to treat &#34;resistant schizophrenia&#34; (resistant meaning pt has tried 2 other antipsychotics to little effect)</p>&#10;<p>- Better for refractory schizophrenia than chlorpromazine</p>";
    var query = "schiz";


    var reg = RegExp("([^\s]+\s){0,5}"+query+"([^\s]+\s){0,5}","g");
    //reg = /([^\s]+\s){0,5}schiz([^\s]+\s){0,5}/g

    var ms = ("" + matchItem).match(reg);
    if(ms!=null){
        ms = ms.join("...");
    }

    return ms;

1 个答案:

答案 0 :(得分:4)

\是字符串文字中的特殊字符,您必须将其转义

"([^\\s]+\\s){0,5}"+query+"([^\\s]+\\s){0,5}"