Javascript RegEx匹配没有前缀或尾随连字符的单词

时间:2012-10-29 00:04:11

标签: javascript regex hyphen

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

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

这与第1-4行中的Smiths相匹配,但也与第7行和第8行中的Smith相匹配 如何让表达式也忽略连字符前面或后跟的Smiths?

  1. 史密斯,琼斯,威尔逊
  2. 史密斯琼斯威尔逊
  3. 琼斯,史密斯(Jr),威尔逊
  4. 琼斯,威尔逊,史密斯
  5. Arrowsmith,琼斯
  6. Wilson,Smithson
  7. Jones,Smith-Treadstone,Wilson
  8. Wilson,Blakely-Smith,Jones
  9. 经过一周和几十次尝试,我问专家们!

1 个答案:

答案 0 :(得分:3)

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

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

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

你当然可以在该角色类中使用\w

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