如果匹配包含正则表达式模式,则排除匹配

时间:2016-11-30 13:58:35

标签: javascript regex regex-negation

许多类似的问题已经存在,但它们并没有解决我的问题。现在,话虽如此,假设我有一个句子 - "患者被转为接受观察"我想只匹配"到 - - - - 观察"现在,如果我有"对于obs" /"用于观察"在句子里面"到 - - - - 观察"然后我不想匹配它。

我的正则表达式如下:

(\bin\b|\bto\b|\badmit\b).{0,100}(observation\b|\bobserve\b|\bobs\b)

但是当我像(?!for)那样使用负面向前看时:

(\bin\b|\bto\b|\badmit\b).{0,100}(?!(for))(observation\b|\bobserve\b|\bobs\b)

它仍然匹配一切。 我需要正则表达式完成的是它是否能够接受观察/观察/观察"它会匹配。但是,如果有"承认观察/观察/观察"那就不会匹配了。

更新:以下正则表达式几乎提供了我想要的输出。

 ((\bin\b|\bto\b)(?!.*for.*(?:\bobs\b|observations\b)).{0,100}(observation\b|\bobserve\b|\bobs\b))|((observation\b|\bobserve\b|\bobs\b).{0,100}(\bstatus\b|\bplace\b|time\b))|(\b(status|place[d]?|placing|admit(?:ted)?|(?:ting)?|start|time|move[d]?)\b.{0,100}(observation\b))

2 个答案:

答案 0 :(得分:0)

您尚未指定正则表达式的风格,但如果它支持后视,请尝试

\b(in|to|admit)\b.{0,100}(?<!for\s)\b(observation|observe|obs)\b

See it here at regex101

您的否定前瞻是指检查observationobserveobs中的任何一个词都不以for开头,这很明显他们不会#39; t;)

修改

好的,所以它是JS。你可以尝试类似的东西:

\b(in|to|admit|was)\b.{0,100}(?!\bfor)...\s(observation|observe|obs)\b

它只是确保关键字之前的字符不是for。 (但它要求在单词之前至少有三个字符。)

Example here at regex101

(我已经在那里转了一下;)

答案 1 :(得分:0)

如果(\bfor\s+)?for等之前有observation个空格,并且observefor,则可以var regex = /\b(in|to|admit|was)\b.{0,100}?(\bfor\s+)?(observation|observe|obs)\b/g; const str = "late case manager feels safest to admit for obs as pt lives ...\nw pt case manager wil to admist obs 1930 pt"; var m, res=[]; while ((m = regex.exec(str)) !== null) { if (m[2] === undefined) { res.push(m[0]); } } console.log(res);查看匹配,丢弃匹配,否则抓住它:

&#13;
&#13;
SELECT STRING_AGG(TransDateString,',')
FROM #dataSet c
ORDER BY TransDate
&#13;
&#13;
&#13;