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

Posted

技术标签:

【中文标题】用于检查字符串是不是不应包含某些单词的正则表达式,但如果这些单词前面有“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用于检查字符串是否不应包含某些单词的正则表达式,但如果这些单词前面有“to”或“for”,则这些单词是可以的 【发布时间】:2020-05-29 13:34:36 【问题描述】:

我有一个用例,对于给定的字符串,我需要检查该字符串是否不包含“com”、“dot”等词,但它如果它们是这样的,可以使用这些词 - 'for com' 'to com' 'to dot'。努力为此编写 regex/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).+

【问题讨论】:

您应该考虑在您的问题中添加一些示例字符串,并说明哪些字符串应该通过,哪些不应该通过。 【参考方案1】:

你可以使用

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

a demo on regex101.com

【讨论】:

谢谢,这很好用。我只需要调整它以允许在字符串中使用 'to com' 、 'to dot' 、 'for dot' 和 'for com' 而不是其他字符串。让我试试。如果你也能帮助我,那就太好了。 好的,我想我只需要在此处匹配的每个单词前面附加 to 和 for 即可。 ^(?!.*\b(?:for com|to com|for dot|to dot)\b).+ Jan - 你能帮我用相反的正则表达式吗?我需要匹配任何包含“for com”、“to com”、“for dot”、“to dot”的单词,但不匹配只有 com 或 dot 而没有前面“for”或“to”的单词【参考方案2】:

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

虽然可能设计一个正则表达式,但我认为调试它并因此维护它会很困难。 (而且,让我们面对现实吧……“他们会改变主意,想要一些稍微不同的东西。”)我敢说我建议的方法会“足够快”并且更易于维护。

【讨论】:

以上是关于用于检查字符串是不是不应包含某些单词的正则表达式,但如果这些单词前面有“to”或“for”,则这些单词是可以的的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式检查不应包含重复数字的手机号码

正则表达式包含某字符串且不包含某些字符串

正则表达式包含某字符串且不包含某些字符串

正则表达式检查字符串是不是只有空格

用于检查字符串是不是严格字母数字的正则表达式

用于获取仅包含模式列表中单词的字符串的正则表达式?