Javascript RegEx 匹配没有前后连字符的单词
Posted
技术标签:
【中文标题】Javascript RegEx 匹配没有前后连字符的单词【英文标题】:Javascript RegEx to match words without preceding or trailing hyphens 【发布时间】: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?
-
史密斯、琼斯、威尔逊
史密斯·琼斯·威尔逊
琼斯、史密斯(小)、威尔逊
琼斯、威尔逊、史密斯
阿罗史密斯,琼斯
威尔逊,史密森
琼斯、史密斯-崔德斯通、威尔逊
威尔逊、布莱克利-史密斯、琼斯
经过一周和几十次尝试,我请教专家!
【问题讨论】:
当我在W之前写了两个斜线时,我在消息预览窗口中只看到了一个斜线。我必须写四个反斜杠才能在预览窗口中看到两个反斜杠。我点击了提交,却没有意识到最终显示与预览版本不对应。 我编辑了问题(以及相应的答案)以反映您的实际代码(使用正确数量的反斜杠)。 【参考方案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”(不区分大小写),那么我会感到困惑。诚然,这是一个牵强附会的例子。以上是关于Javascript RegEx 匹配没有前后连字符的单词的主要内容,如果未能解决你的问题,请参考以下文章
Python regex如何在字母和数字之间插入连字符;并删除两个字母之间的连字符
RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +
Javascript Regex - 查找所有可能的匹配项,即使在已经捕获的匹配项中
用于匹配正整数和负整数的 Javascript RegEx [重复]