【问题标题】:Different behaviours when using regex in javascript在 javascript 中使用正则表达式时的不同行为
【发布时间】:2014-12-30 08:09:53
【问题描述】:

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

但是,我似乎遇到了一种奇怪的情况,“new 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”,没有给出相同的结果,谁能解释为什么会这样? 这是整个sn-p:

    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;

【问题讨论】:

  • 您忘记了“new”关键字吗?
  • 你需要转义你的\​s。
  • var query...var reg 行粘贴到控制台会显示(正如@SLaks 指出的那样)输出是/([^s]+s){0,5}schitz([^s]+s){0,5}/g

标签: javascript regex


【解决方案1】:

\ 是字符串字面量中的特殊字符,必须转义

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

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 2018-04-24
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多