【问题标题】:Javascript RegEx to match words without preceding or trailing hyphensJavascript RegEx 匹配没有前后连字符的单词
【发布时间】:2012-10-18 08:05:42
【问题描述】:

我需要一个用于 Javascript 的 RegEx,它将匹配第 1-4 行中的字符串“smith”,但不匹配下面第 5-8 行中的字符串。
带编号的行是 Access 数据库中的字段(字段不包含数字)。
到目前为止我所拥有的是:

var xy = 'smith';
MyString = new RegExp('(^|\\W)' + xy + '(\\W|$)', 'i');

这与第 1-4 行中的 Smiths 以及第 7 行和第 8 行中的 Smiths 匹配。
如何让表达式也忽略前面或后面有连字符的 Smiths?

  1. 史密斯、琼斯、威尔逊
  2. 史密斯·琼斯·威尔逊
  3. 琼斯、史密斯(小)、威尔逊
  4. 琼斯、威尔逊、史密斯
  5. 阿罗史密斯,琼斯
  6. 威尔逊,史密森
  7. 琼斯、史密斯-崔德斯通、威尔逊
  8. 威尔逊、布莱克利-史密斯、琼斯

经过一周和几十次尝试,我请教专家!

【问题讨论】:

  • 当我在W之前写了两个斜线时,我在消息预览窗口中只看到了一个斜线。我必须写四个反斜杠才能在预览窗口中看到两个反斜杠。我点击了提交,却没有意识到最终显示与预览版本不对应。
  • 我编辑了问题(以及相应的答案)以反映您的实际代码(使用正确数量的反斜杠)。

标签: javascript regex hyphen


【解决方案1】:

自己编写否定字符类 (\W) 并包含连字符:

MyString = new RegExp('(^|[^a-z0-9_-])' + xy + '([^a-z0-9_-]|$)', 'i');

\W 匹配任何非单词字符(除了字母、数字和下划线之外的所有字符),[^a-z0-9_-] 匹配任何既不是单词字符也不是连字符的字符。

您当然可以在该字符类中使用\w

MyString = new RegExp('(^|[^\\w-])' + xy + '([^\\w-]|$)', 'i');

【讨论】:

  • 谢谢,m.buettner,您的代码运行良好,尽管我很好奇为什么它不需要方括号中的 A-Z! ridgerunner,我正在使用你的建议,因为它更短更甜,但我必须在第二个 w 之前添加一个反斜杠。 :-)
  • @user1781623,它不需要A-Z,因为末尾的i 表示“不区分大小写”
  • @ridgerunner 我是这么认为的,但我不确定为什么 OPs 版本甚至会像他用这 4 个反斜杠描述的那样工作。
  • @m.buettner 我是 RegExp 的新手,不确定i 是指搜索的字符串还是条件,或两者兼而有之。例如。如果我想匹配前面有大写“A”或小写“x”的所有出现的“qwerty”(不区分大小写),那么我会感到困惑。诚然,这是一个牵强附会的例子。
猜你喜欢
  • 2016-05-14
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 2014-01-05
  • 1970-01-01
相关资源
最近更新 更多