我遇到正则表达式问题:
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')
答案 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。