正则表达式 - 如何排除单个单词?

mka*_*kas 21 regex

我正在使用http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/进行验证.验证规则以下列方式定义:

            "onlyLetterSp": {
                "regex": /^[a-zA-Z\ \']+$/,
                "alertText": "* Only letters"
            }
Run Code Online (Sandbox Code Playgroud)

我想添加新规则,它将排除一个单词.我已经在StackOverflow上阅读了一些类似的问题,并试图用类似的东西来声明它

"regex": /(?!exclude_word)\^[a-zA-Z\ \']+$/,
Run Code Online (Sandbox Code Playgroud)

但它没有用.你能给我一些建议怎么做吗?

Cod*_*key 42

现在是使用单词边界断言的好时机,如@FailedDev所示,但需要注意避免拒绝某些非TOO特殊情况,例如wordy,wordsmith甚至不那么明显的情况,如swordforeword

我相信这会很好用:

\b(?!\bword\b)\w+\b
Run Code Online (Sandbox Code Playgroud)

这是表达式:

\b        # assert at a word boundary
(?!       # look ahead and assert that what follows IS NOT... 
  \b      #   a word boundary
  word    #   followed by the exact characters `word`
  \b      #   followed by a word boundary
)         # end look-ahead assertion
\w+       # match one or more word characters: `[a-zA-Z0-9_]`
\b        # then a word boundary
Run Code Online (Sandbox Code Playgroud)

但是,原始问题中的表达式不仅仅与单词字符匹配.[a-zA-Z\ \']+匹配空格(以支持输入中的多个单词)和单引号(对于撇号?).如果您需要允许带有撇号的单词,请使用以下表达式:

\b(?!\bword\b)[a-zA-Z']+\b
Run Code Online (Sandbox Code Playgroud)

RegexBuddy测试从匹配中排除


Fai*_*Dev 22

\b(?:(?!word)\w)+\b
Run Code Online (Sandbox Code Playgroud)

不符合"单词".


Boh*_*ian 6

从您的问题中不清楚您想要什么,但我已将其解释为“不匹配包含特定单词的输入”。这个的正则表达式是:

^(?!.*\bexclude_word\b)
Run Code Online (Sandbox Code Playgroud)