正则表达式中“\\ s”的含义是什么

时间:2014-01-13 19:30:16

标签: javascript regex

我遇到正则表达式问题:

var regex = new RegExp('(^|\\s)' + clsName + '(\\s|$)');

(^|\\s)是什么意思?它不等于(^|\s)(^|)是什么意思?

我是对的,这意味着字符串应该以任何字母或空格开头?我尝试使用browser和console.log进行测试,但仍无法获得任何解决方案。

在所有教程中,\s用作\\s的空间模式。

好的,我明白了,问题是:

使用RegExp构造函数时:对于正则表达式中的每个反斜杠,必须在RegExp构造函数中键入\\。 (在JavaScript字符串中,\\表示单个反斜杠!)例如,以下正则表达式匹配所有前导和尾随空格(\ s);请注意\\s作为RegExp构造函数的第一个参数的一部分传递:

re = /^\s+|\s+$/g
re = new RegExp('^\\s+|\\s+$','g')

2 个答案:

答案 0 :(得分:2)

(^|\\s)表示:字符串的开头(^)或(|)空格\\s

例如,如果clsName"abc",则会构建模式(^|\\s)abc(\\s|$)。在字符串的开头,中间或结尾搜索"abc",它可能被空格包围,所以这些是有效的:

  • "abc"
  • "abc x"
  • "x abc"
  • "x abc y"

请注意,您在此处使用字符串来构建RegExp。 JavaScript会忽略它不知道的转义字符 - '\s''s'相同,这是不正确的。

另一种选择是使用word boundaries,但在某些情况下可能会失败(例如,搜索btn会匹配btn-primary):

var regex = new RegExp('\\b' + clsName + '\\b');

我还警告clsName 可能包含正则表达式元字符,因此您可能需要escape it

答案 1 :(得分:0)

为什么不将字符串拆分为“”?

var string = 'abc defh ij klm';
var elements = string.split(' ');
var clsName = 'abc';
elements.filter(function (el) {
    return el === clsName;
});

不需要像您发布的那样的RegEx。