How to use AND operator in regexp and string replacer function. Please see the below code sample. Here, since I am using a | (OR) operator I am getting an output like this
["I am number [1]", "I am number [1]2", "I am number [1]2[3]", "I am number [1]2[3]4", "I am number [1]2[3]45", "I am number [1]2[3]456"]
So, instead of OR how to use AND so that only strings containing 1 & 3 should be effected not others. I have tried using
var patt = /(?=.*1)(?=.*3)/g;
it did not work, although if I do patt.test("String") it works fine. But, with replacer function it is not. Can any one please help
var arr = [ "I am number 1",
"I am number 12", "I am number 123", "I am number 1234",
"I am number 12345", "I am number 123456"];
var patt = /1|3/g;
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].replace(patt, function(match) {
if (match.length) return '['+match+']';
else return match;
});
};
console.log(arr);
EDIT: An indirect way is to have two patterns
var pattToReplace = /1|3/g;
var pattToValidate = /(?=.*1)(?=.*3)/g;
var arr = [ "I am number 1",
"I am number 12", "I am number 123", "I am number 1234",
"I am number 12345", "I am number 123456", "I am number 33234156"];
var pattToReplace = /1|3/g;
var pattToValidate = /(?=.*1)(?=.*3)/g;
for (var i = 0; i < arr.length; i++) {
if (pattToValidate.test(arr[i])) {
arr[i] = arr[i].replace(pattToReplace, function(match) {
if (match.length) return '['+match+']';
else return match;
});
}
};
document.write(JSON.stringify(arr, null, 2));
1\d*3\d*. Or\d*1\d*3\d*if you expect[ "I am number 1", "I am number 12", "I am number [123]", "I am number [1234]", "I am number [12345]", "I am number [123456]" ].arr[i] = arr[i].replace(/(?:(1)([0-9]*)(3))|(?:(3)([0-9]*)(1))/g, "[$1]$2[$3]");