使用正则表达式匹配动态字符串

时间:2010-01-27 06:57:43

标签: javascript regex

我正在尝试检测字符串中字符串的出现。但是下面的代码总是返回“null”。显然出了问题,但由于我是新手,我无法发现它。我期待代码返回“true”而不是“null”

var searchStr = 'width'; 
var strRegExPattern = '/'+searchStr+'\b/'; 
"32:width: 900px;".match(new RegExp(strRegExPattern,'g'));

4 个答案:

答案 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