用于检查字符串是否不应包含某些单词的正则表达式,但如果这些单词前面有 'to' 或 'for',则这些单词是可以的

Regex for checking if a string should not contain certain words but those words are ok if they have a 'to' or 'for' preceeding the words

我有一个用例,对于给定的字符串,我需要检查该字符串是否不包含像 'com'、'dot' 等等,但是如果它们是这样的,就可以使用这些词 - 'for com' 'to com' ''。努力为此编写正则表达式/ javascript 函数。

例如:

'maincom', 'maindot'

根据正则表达式模式不应该被接受

'main for com', 'main for dot', 'main to dot', 'main to com'

根据正则表达式模式应该可以接受

根据下面 Jan 的评论回答-

^(?!.*\b(?:for com|to com|for dot|to dot)\b).+

我想到的不是单个正则表达式,而是一个简短的算法:将字符串拆分为 "words"(由一个或多个非字母字符分隔),生成一个值数组。查看数组中是否出现违规词,如果出现,请查看每种情况下的前面词,看看它是否是 "to."

虽然 可能 设计一个正则表达式,但我认为调试它并因此维护它会很困难。 (而且,让我们面对现实吧……"they'll change their mind and want something slightly different.")我敢说我建议的方法是 "plenty fast enough" 并且更易于维护。

你可以使用

^(?!.*\b(?:com|dot)\b).+

a demo on regex101.com