2014-12-30 26 views
2

我正在使用javascript和正则表达式来扫描特定单词('schiz')的句子,然后将匹配以及查询单词前面和后面的5个单词一起返回。在javascript中使用正则表达式时的不同行为

但是,我似乎遇到了一个奇怪的情况,其中“new Regexp()”对象的行为与仅使用普通正则表达式的行为不同。

在下面的代码,如果我使用:

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

然后返回如预期,但因为我需要的查询词是一个变量,我需要使用“新的正则表达式()”创建我的正则表达式。

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; 
+0

你忘了“新”的关键字? – slebetman

+2

你需要逃避你的''s。 – SLaks

+0

将'var query ...'和'var reg'行粘贴到控制台会告诉你(作为@SLaks指出的),输出是'/([^ s] + s){0,5} schitz ([^ S] + S){0,5}/g'。 – adamdc78

回答

4

\在字符串中的特殊字符的文字,你要逃避它

"([^\\s]+\\s){0,5}"+query+"([^\\s]+\\s){0,5}" 
相关问题