Match Dynamic String Using Regex
Solution 1:
Please don't put '/' when you pass string in RegExp option
Following would be fine
var strRegExPattern = '\\b'+searchStr+'\\b';
"32:width: 900px;".match(newRegExp(strRegExPattern,'g'));
Solution 2:
You're mixing up the two ways of creating regexes in JavaScript. If you use a regex literal, /
is the regex delimiter, the g
modifier immediately follows the closing delimiter, and \b
is the escape sequence for a word boundary:
var regex = /width\b/g;
If you create it in the form of a string literal for the RegExp constructor, you leave off the regex delimiters, you pass modifiers in the form of a second string argument, and you have to double the backslashes in regex escape sequences:
var regex = newRegExp('width\\b', 'g');
The way you're doing it, the \b
is being converted to a backspace character before it reaches the regex compiler; you have to escape the backslash to get it past JavaScript's string-literal escape-sequence processing. Or use a regex literal.
Solution 3:
The right tool for this job is not regex, but String.indexOf:
var str ='32:width: 900px;',
search='width',
isInString =!(str.indexOf(search) ==-1);
// isInString will be a boolean. truein this case
Documentation: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/indexOf
Solution 4:
Notice that '\\b' is a single slash in a string followed by the letter 'b', '\b' is the escape code \b
, which doesn't exist, and collapses to 'b'.
Also consider escaping metacharacters in the string if you intend them to only match their literal values.
varstring = 'width';
var quotemeta_string = string.replace(/[^$\[\]+*?.(){}\\|]/g, '\\$1'); // escape meta charsvar pattern = quotemeta_string + '\\b';
var re = newRegExp(pattern);
var bool_match = re.test(input); // just test whether matchesvar list_matches = input.match(re); // get captured results
Post a Comment for "Match Dynamic String Using Regex"