Serhat Ozgel
Serhat Ozgel

Reputation: 23786

Matching exact string with JavaScript

How can I test if a RegEx matches a string exactly?

var r = /a/;
r.test("a"); // returns true
r.test("ba"); // returns true
testExact(r, "ba"); // should return false
testExact(r, "a"); // should return true

Upvotes: 93

Views: 177538

Answers (6)

MichiMich
MichiMich

Reputation: 64

In case anyone receives an error like

Syntax Error: Invalid regular expression

by using the .match() function. You could always go back to the roots: !!note this code is for matchin an exact string, if you want to search for an exact phrase in a string, you should filter it before hand

console.log("Exact data found: ", hasExactString("?hello", "?hello"))

console.log("Exact data found: ", hasExactString("?hello", "?helloBye"))


function hasExactString(data, searchTerm) {
    console.log("search for ", searchTerm, " in ", data);
    data = data.toLowerCase(); //if search term should be case insensitive
    const searchExpressionLength = searchTerm.length;
    const dataInputLength = data.length;
    if (dataInputLength != searchExpressionLength) {
        return false;
    }
    else {
        //search letter by letter -back to the roots
        for (var i = 0; i < searchExpressionLength; i++) {
            if (data[i] != searchTerm[i]) {
                return false;
            }
        }
        return true;
    }
}

...13 years late, but nonetheless^^

Upvotes: 1

kp123
kp123

Reputation: 1340

Here's what is (IMO) by far the best solution in one line, per modern javascript standards:

const str1 = 'abc';
const str2 = 'abc';
return (str1 === str2); // true


const str1 = 'abcd';
const str2 = 'abc';
return (str1 === str2); // false

const str1 = 'abc';
const str2 = 'abcd';
return (str1 === str2); // false

Upvotes: -9

Jimmy
Jimmy

Reputation: 91502

Either modify the pattern beforehand so that it only matches the entire string:

var r = /^a$/

or check afterward whether the pattern matched the whole string:

function matchExact(r, str) {
   var match = str.match(r);
   return match && str === match[0];
}

Upvotes: 171

Aravind Cheekkallur
Aravind Cheekkallur

Reputation: 3205

var data =   {"values": [
    {"name":0,"value":0.12791263050161572},
    {"name":1,"value":0.13158780927382124}
]};

//JSON to string conversion
var a = JSON.stringify(data);
// replace all name with "x"- global matching
var t = a.replace(/name/g,"x"); 
// replace exactly the value rather than all values
var d = t.replace(/"value"/g, '"y"');
// String to JSON conversion
var data = JSON.parse(d);

Upvotes: -4

Svante
Svante

Reputation: 51551

If you do not use any placeholders (as the "exactly" seems to imply), how about string comparison instead?

If you do use placeholders, ^ and $ match the beginning and the end of a string, respectively.

Upvotes: 17

Prestaul
Prestaul

Reputation: 85224

Write your regex differently:

var r = /^a$/;
r.test('a'); // true
r.test('ba'); // false

Upvotes: 41

Related Questions