【问题标题】:How to match whole words while each word is case insensitive without RegexOptions.IgnoreCase?如果没有 RegexOptions.IgnoreCase,如何在每个单词不区分大小写的情况下匹配整个单词?
【发布时间】:2015-11-05 20:43:01
【问题描述】:

我希望我的 RegEx 在服务器端和客户端都可以工作(使用 javascript) 我正在像这样装饰我的 ViewModel:

    [Display(Name = ConstantKeys.ValidationMessage_Gender_Name)]
    [Required(ErrorMessage = ConstantKeys.ValidationMessage_Gender_Required)]
    [RegularExpression(RegExKeys.Gender, ErrorMessage = ConstantKeys.ValidationMessage_Gender_RegEx)]

但我不知道是否可以将 RegexOptions.IgnoreCase 用于 RegularExpression 属性...

如何编写匹配这些的正则表达式:

word1|wORD2|wOrD3 ...

(我希望正则表达式仍然是人类可读的) 提前致谢。

澄清: 我想匹配任何单词(不仅仅是 word1-3) 更好的例子:

Man1|woMAN2|MoNkEY3

【问题讨论】:

  • "我希望正则表达式仍然是人类可读的" -- 可以阅读正则表达式的人类可读...
  • 我的意思是那些想要使用正则表达式但不想毕生致力于理解正则表达式的来龙去脉的人类可读的:-)
  • 检查(word\d\|?)+
  • 你主要用js吗?如果是这样,为什么不将所有单词添加到数组中。然后将它们迭代到带有 i 标志的新 RegExp 构造函数中??
  • 此外,如果您使用各种库,则需要指定此项。看起来您使用 ASP.net 或 c# 与 RegexOptions.IgnoreCase

标签: javascript regex case-insensitive


【解决方案1】:

如果你正在寻找字符串中的第一个单词,那么就这样吧:

'asdasd ujh32d %^#@ mAN1'.match(/[\w]+/)

-> ["asdasd"]

如果你想列出所有的单词,那么:

'asdasd ujh32d %^#@ mAN1'.split(/[\W]+/)

-> ["asdasd", "ujh32d", "mAN1"]

【讨论】:

【解决方案2】:

怎么样 ([wW][oO][rR][dD])|([aA][nN][dD])|([Ss][oO])|([Oo][Nn])| ([fF][oO][rR][eE]+[vV][eE]+[rR])

[] 中的所有字符表示这些字符中的任何一个,因此您可以放置​​不同的

中的字母选择

() 将一个替代词组合在一起

|让 th reg 选择任何 () 个单词

word 等永远都匹配表达式以及

永远的词等等。

【讨论】:

  • 那1、2、3呢?
  • 不,我想列出所有单词 - 所以如果我有 50 个单词,它看起来不会像一团糟......此外,如果我采用你的方法 - 我如何添加 3单词(我是否使用管道符号作为分隔符?)
  • [0-9] 表示任意1位数字,[0-9]+多位
  • 我的第一个例子不是一个好例子......我希望能够匹配不同的单词(更好的例子:“Man1|woMAN2|MoNkEY3”)
  • 我可能最终会编写一个函数,根据单词列表动态构建它......但希望找到一个更清洁的解决方案......
猜你喜欢
  • 1970-01-01
  • 2019-01-18
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多