【发布时间】: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> <p>- Used to treat "resistant schizophrenia" (resistant meaning pt has tried 2 other antipsychotics to little effect)</p> <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