Ryan Leach
Ryan Leach

Reputation: 4470

Javascript matching strings to partial matches

How can I make a partial string match in Javascript?

e.g. to match 'Alf'

https://jsfiddle.net/zbzc5tqe/1/

I would welcome shorter / more use of javascript inbuilt functions.

var arr = ['Alfred', 'Alf', 'alf', 'al', 'altered', 'half', '', 'bob'];

arr.forEach(function(element) {
  add(element + "->" + matches(element, 'Alf'));
});

function ignoreCase(s1, s2) {
  var needleRegExp = new RegExp('^' + s2 + "$", "i");
  return needleRegExp.test(s1)
}

function partializer(string) {
  var out = [];
  for (var i = 1; i < string.length; i++) {
    out.push(string.slice(0, i));
  }
  return out;
}

function matches(text, partial) {
  var parts = partializer(partial);
  for (var i = 0; i < parts.length; i++) {
    if (startsWith(text, parts[i])) {
      return true;
    }
  }
  return false;
}

function startsWith(text, element) {
  var s2 = text.split(0, element.length - 1);
  return ignoreCase(element, s2);
}

function add(text) {
  var olList = document.getElementById('list');
  var newListItem = document.createElement('li');
  newListItem.innerText = text;
  olList.appendChild(newListItem);
}
<ol id="list">
</ol>

Upvotes: 8

Views: 17073

Answers (3)

subramanian
subramanian

Reputation: 1305

didnt check partial usecase before, you can use regex like the one below

   var value = 'ALF';
   var comparor = value.slice(0, element.length - 1);
   var regexp = new RegExp("^"+comparor, "i");
   regexp.test(element);

var arr = ['Alfred', 'Alf', 'alf', 'al', 'half', '', 'bob'];
var value = '00';
arr.forEach(function(element) {
    var comparor = (element.length > 1 ) ? value.slice(0, element.length - 1) : value;
    var regexp = new RegExp("^"+comparor, "i");
  add(element + "->" + regexp.test(element));
});



function add(text) {
  var olList = document.getElementById('list');
  var newListItem = document.createElement('li');
  newListItem.innerText = text;
  olList.appendChild(newListItem);
}
<ol id="list">
</ol>

Upvotes: 2

KevBot
KevBot

Reputation: 18908

Seems like you just want to know if a string starts with the substring:

function test(arr, sub) {
  sub = sub.toLowerCase();
  return arr.map(str => str
    .toLowerCase()
    .startsWith(sub.slice(0, Math.max(str.length - 1, 1)))
  );
}

var arr = ['Alfred', 'Alf', 'alf', 'al', 'altered', 'half', '', 'bob'];

var results = test(arr, 'alf');
console.log(results);

Upvotes: 9

Chris
Chris

Reputation: 458

Using .indexOf to find if there is any matches in the string. Refer to

function matches(text, partial) {
  return text.toLowerCase().indexOf(partial.toLowerCase()) > -1;
}

function matchesCase(text, partial) {
  return text.indexOf(partial) > -1;
}

https://jsfiddle.net/zbzc5tqe/3/

Use the matchesCase() function if you would like to match case sensitive only.

Upvotes: 4

Related Questions