RegExp匹配一个没有指定大小写的单词(比如\bOK\b,但只匹配oK、Ok或ok)[重复]

lokaqttq  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(82)

此问题在此处已有答案

How to match all spellings of the word except one?(1个答案)
13天前关门了。
我需要匹配那些不是以“标准”方式写的单词/缩写,不管它是什么。
应该与\bOK\b类似地工作,以这种方式匹配:

Match here -> Ok
Match here -> oK
Match here -> ok
Would not match here -> OK

字符串
我有很多的话,应该检查这种方式,如果它是超过夫妇字符添加检查所有排列的不同情况下,非常大,非常快。
因此,寻找更优雅的解决方案,而不是为所有排列或常见的错误大小写创建正则表达式:

(?-i)\bSaas\b
(?-i)\bsAAS\b
(?-i)\bSAAS\b
...


而不是只是匹配一个词的情况下不同的“SaaS”,我想找到(种拼写错误)非标准的情况

ybzsozfc

ybzsozfc1#

由于支持PCRE,因此可以使用正则表达式

\b(?!OK)(?i)OK\b

字符串
Demo
这是可行的,因为(?i)只有在执行了负向前瞻之后才会生效(在我尝试之前我并不知道这一点)。
正则表达式可以分解如下。

\b      match a word boundary
(?!OK)  a negative lookahead asserts that the next two characters not 'OK'
(?i)    match the remainder of the pattern with the case-indifferent flag set 
OK      match the literal 'OK', 'ok', 'Ok' or 'oK'
\b      match a word boundary


同样,你可以写

\b(?!SaaS)(?i)saas\b


当然也可以写成

\b(?!SaaS)(?i)SaaS\b


\b(?!SaaS)(?i)sAAs\b



Demo

iklwldmw

iklwldmw2#

这不是正则表达式本身就能解决的问题,你应该再检查一下,看看它是否与你不想要的东西匹配。

// pseudocode
let pattern = "(SaaS)"

let match = regex.match(pattern, str, caseSensitive=false)

if (match && match.group(1) != "SaaS") {
    // the pattern matched a different way of spelling
}

字符串

相关问题