为什么这个正则表达式总是返回null?

时间:2013-03-25 00:40:44

标签: javascript regex string match

我需要检查字符串中的classname。

我的字符串如下所示:

testing ui-li ui-li-static ui-btn-up-f ui-first-child ui-filter-hidequeue

我正在寻找ui-filter-hidequeue字符串中的任何地方(!)。

这就是我正在尝试的。它总是返回null,虽然我想要匹配的字符串是:

var classPassed = 'ui-filter-hidequeue',
    classes = 'testing ui-li ui-li-static ui-btn-up-f ui-first-child ui-filter-hidequeue',
    c = new RegExp('(?:\s|^)' + classPassed + '(?:\s|$)');

console.log( classes.match(c) )   // returns null

问题:
有人能告诉我在我的正则表达式中我做错了吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要\\s。字符串中的\s将转义s,它不需要转义,并且只计算"s"。即当你使用文字正则表达式时,反斜杠会转义正则表达式字符;和字符串也使用反斜杠来转义字符串字符。当你从一个字符串构建一个正则表达式时,你需要考虑这两个层:\\是字符串 - 逃避说\的方式,然后\s是regexp-escapey方式说空白。

正如其他评论所显示的那样,有更好的方法可以测试课程的存在。 :)但我刚回答了直接错误。

答案 1 :(得分:0)

尝试使用:

c = new RegExp('\\b' + classPassed + '\\b');

\b元字符匹配单词的开头/结尾;它代表边界(如,boudnary一词)。