Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排除包含正则表达式模式的匹配项_Javascript_Regex_Regex Negation - Fatal编程技术网

Javascript 排除包含正则表达式模式的匹配项

Javascript 排除包含正则表达式模式的匹配项,javascript,regex,regex-negation,Javascript,Regex,Regex Negation,许多类似的问题已经存在,但它们并不能解决我的问题。话虽如此,假设我有一句话——病人被转移到观察室,我只想把这一部分匹配到——观察室,如果我要把obs/句子内的观察室匹配到——观察室,那么我不想匹配它 我的正则表达式如下所示: (\bin\b|\bto\b|\badmit\b).{0,100}(observation\b|\bobserve\b|\bobs\b) 但是当我使用消极的前瞻性的时候,就像?!像这样: (\bin\b|\bto\b|\badmit\b).{0,100}(?!(for))

许多类似的问题已经存在,但它们并不能解决我的问题。话虽如此,假设我有一句话——病人被转移到观察室,我只想把这一部分匹配到——观察室,如果我要把obs/句子内的观察室匹配到——观察室,那么我不想匹配它

我的正则表达式如下所示:

(\bin\b|\bto\b|\badmit\b).{0,100}(observation\b|\bobserve\b|\bobs\b)
但是当我使用消极的前瞻性的时候,就像?!像这样:

(\bin\b|\bto\b|\badmit\b).{0,100}(?!(for))(observation\b|\bobserve\b|\bobs\b)
它仍然匹配所有东西。 我需要正则表达式来完成的是,如果它允许进行观察/观察/在观察中,它将匹配。但是,如果要允许进行观测/obs/in观测,则它将不匹配

更新:下面的正则表达式提供了我想要的输出

 ((\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))

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

\b(in|to|admit)\b.{0,100}(?<!for\s)\b(observation|observe|obs)\b
它只是确保关键字前的字符不用于。但是,它确实要求单词前至少有三个字符

我在那里有点自由自在

您可以使用\b检查\s+?如果在观察、观察等之前有for+空格,并且如果for匹配,则放弃匹配,否则抓住它:

var regex=/\bin | to | admit | was\b.{0100}?\b for\s+?observation | obs\b/g; const str=已故的案例经理认为在pt活着的情况下承认obs最安全…\nw pt案例经理会欣赏obs 1930 pt; var m,res=[]; 而m=regex.execstr!==空的{ 如果m[2]==未定义{ res.pushm[0]; } }
console.logres;您使用的是正则表达式以外的特定语言吗?问题不清楚。请使用一些示例输入文本和预期结果进行澄清。另外,添加工具/语言标记。我正在使用,我只需要普通正则表达式。我已经更新了问题并附上了截图。ThanksI建议只使用第二个正则表达式过滤匹配项并跳过那些匹配项。尝试如下:\b为了\b.{0100}?!observations\bin\b |\bto\b.{0100}observations\b | \b | \b | \b | \b | \b这给了我相同的输出regex风格是javascript,它在js中给出了模式错误,但感谢您的贡献。我已经将问题更新为使用可选的捕获组,并检查其是否未定义。如果是,抓取匹配,否则,放弃。这不是我想要的情况,你假设for之后有3个字符,然后是关键字,在我的情况下,关键字@ClasGNo之前可以有任意数量的字符,我不假设for之后有3个字符。这个我们已经用否定的前瞻性确定了哪些字符不是我们要吃的。@ClasG如果我对这个患者测试你的正则表达式,它将被移动到住院进行观察,它与之匹配,这是不应该的。toMy方法更干净。同样,更易于维护和扩展。您的解决方案几乎匹配我不想匹配的所有内容,您只需将正则表达式粘贴到我的给定链接中即可查看自己。@feather:不,它提取您需要的内容。当你手边有JS能力的时候,你不需要使用一个巨大且不可读的正则表达式。
\b(in|to|admit|was)\b.{0,100}(?!\bfor)...\s(observation|observe|obs)\b