我正在尝试检测字符串中字符串的出现。但是下面的代码总是返回“null”。显然出了问题,但由于我是新手,我无法发现它。我期待代码返回“true”而不是“null”
var searchStr = 'width';
var strRegExPattern = '/'+searchStr+'\b/';
"32:width: 900px;".match(new RegExp(strRegExPattern,'g'));
答案 0 :(得分:20)
在RegExp选项中传递字符串时,请不要输入'/'
以下会没事的
var strRegExPattern = '\\b'+searchStr+'\\b';
"32:width: 900px;".match(new RegExp(strRegExPattern,'g'));
答案 1 :(得分:4)
您正在混淆使用JavaScript创建正则表达式的两种方法。如果使用正则表达式文字,/
是正则表达式分隔符,g
修饰符紧跟在结束分隔符之后,\b
是字边界的转义序列:
var regex = /width\b/g;
如果以RegExp构造函数的字符串文字形式创建它,则不使用正则表达式分隔符,以第二个字符串参数的形式传递修饰符,并且必须将正则表达式转义序列中的反斜杠加倍:
var regex = new RegExp('width\\b', 'g');
你正在这样做,\b
在到达正则表达式编译器之前被转换为退格符;你必须逃避反斜杠才能使它超越JavaScript的字符串文字转义序列处理。或者使用正则表达式文字。
答案 2 :(得分:3)
此作业的正确工具不是正则表达式,而是String.indexOf:
var str = '32:width: 900px;',
search = 'width',
isInString = !(str.indexOf(search) == -1);
// isInString will be a boolean. true in this case
文档:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/indexOf
答案 3 :(得分:0)
请注意,'\\ b'是字符串中的单个斜杠,后跟字母'b','\ b'是转义代码\b
,它不存在,并折叠为'b ”。
如果您希望它们仅匹配其字面值,请考虑转义字符串中的元字符。
var string = 'width';
var quotemeta_string = string.replace(/[^$\[\]+*?.(){}\\|]/g, '\\$1'); // escape meta chars
var pattern = quotemeta_string + '\\b';
var re = new RegExp(pattern);
var bool_match = re.test(input); // just test whether matches
var list_matches = input.match(re); // get captured results