I am trying to strip out a couple of matching words from an array of string. Below is the array containing the string
let string = ["select from table order by asc limit 10 no binding"]
I am trying to get rid of any that has order by and limit and its value and preserving the remaining. I have tried the following but none of them are elegant/efficient.
let splitString = string.split(' ');
let str1 = 'limit';
let str2 = 'order';
let str3 = 'by';
let str4 = 'asc';
let str5 = '10';
splitString = splitString.filter(x => x !== str1);
splitString = splitString.filter(x => x !== str2);
splitString = splitString.filter(x => x !== str3);
splitString = splitString.filter(x => x !== str4);
splitString = splitString.filter(x => x !== str5);
Is there a proper way of getting rid of those words from the string? TIA
CodePudding user response:
Make an array or Set of the strings you want to remove, then filter by whether the word being iterated over is in the Set.
const input = ["select from table order by asc limit 10 no binding"]
const wordsToExclude = new Set(['limit', 'order', 'by', 'asc', '10']);
const words = input[0].split(' ').filter(word => !wordsToExclude.has(word));
console.log(words);
If you don't actually want to remove all of those words, but only such a sequence, use a regular expression to match limit
until you come across numbers.
const input = ["select from table order by asc limit 10 no binding"];
const result = input[0].replace(/order\b.*?\d /, '');
console.log(result);
If additional numbers can come in between the sequence, match limit \d
at the end, rather than just \d
const input = ["select from table order by 1 asc limit 33 no binding"];
const result = input[0].replace(/order\b.*?limit \d /, '');
console.log(result);