我有一个text
,我需要匹配所有的文本部分,除了给定的单词regexp
例如,如果文本是' Something went wrong and I could not do anything '
,给定的单词是'and'
和'not'
,则结果必须是['Something went wrong', 'I could', 'do anything']
请不要建议我使用string.split()
或string.replace()
等。我知道有几种方法可以用内置方法来做到这一点。我想知道是否有一个正则表达式可以做到这一点,当我将执行text.match(/regexp/g)
请注意,正则表达式必须至少在Chrome,Firefox和Safari版本中工作,并且不低于当前版本的3!在问这个问题的时候,实际的版本分别是100.0、98.0.2和15.3。例如,您无法在Safari中使用lookbehind功能
在回答我的问题之前,请到https://regexr.com/检查你的答案!。正则表达式应该突出显示句子的所有部分,包括需要部分的单词之间的空格以及需要部分周围的空格,除了给定的单词
在问这个问题之前,我试着做我自己的搜索,但这个链接没有帮助我。我也试过不接受的答案:
Match everything except for specified strings
Regex: match everything but a specific pattern
Regex to match all words except a given list
Regex to match all words except a given list (2)
Need to find a regular expression for any word except word1 or word2
Matching all words except one
Javascript match eveything except given words
2条答案
按热度按时间hjzp0vay1#
在javascript中只使用match和lookaheads是可能的。
测试RegExr here
基本上匹配一个不是限制词的词的开头
\b(?=\w)(?!(?:and|not)\b)
然后进行惰性匹配,直到下一个空格和受限制的单词,或者不包括最后一个空格的行尾。
.*?(?=\s+(?:and|not)\b|\s*$)
测试片段:
af7jpaap2#
请参见下面的【编辑】。
你可以使用这个正则表达式,它只使用look ahead:
说明:
(?!and|not)
-and
或not
的负前瞻\b
-匹配字边界,以防止匹配nd
和ot
.*?
-匹配任何字符零次或多次,尽可能少(?=and|not|$)
-提前查找and
或not
或end of text
如果文本有多行,则可以添加
m
标志(多行)。也可以将dot(.
)替换为[\s\S]
。编辑:
我做了一些修改,删除了禁止使用的单词:
我添加了一个
\w
字符匹配,以将匹配的开始推到空格之后,并在前瞻中添加了空格。Edit 2:(用于处理单词周围的多个空格):
你就差一点!您只需要在美元符号和指定的单词之前添加一个
\s*
即可:更新链接:regexr.com