글자 찾기
function searchWord(target: string, str: number | string) {
let searchArr: string[] = [];
const newStr = str.toString();
let index = 0;
let result: string;
let sliceIndex: number;
if (target.length < newStr.length) {
return "Failed";
}
for (let letter of target) {
const regex = new RegExp(/[^0-9a-zA-Z가-힣]/g);
if (letter === newStr[index]) {
searchArr.push(letter);
index++;
} else if (searchArr.length !== 0 && regex.test(letter)) {
searchArr.push(letter);
} else {
index = 0;
searchArr = [];
}
if (index === newStr.length) {
break;
}
}
result = searchArr.join('');
sliceIndex = target.indexOf(result);
return (
target.slice(0, sliceIndex) +
`<span>` +
target.slice(sliceIndex, sliceIndex + result.length) +
`</span>` +
target.slice(sliceIndex + result.length, target.length)
);
}
const list = [
"TEST 테%스%트 아이^스아메리#카)노 3,500원@@@",
"TEST 테%스%트 아@이^스아메리#카노 3,500원@@@",
"TEST 테%스%트 아이^스아메$리#카(노 3,500원@@@",
"TEST 테%스%트 아이^스아^메리#카노 3,500원@@@",
"TEST 테%스%트 아이^스#아메#리카*노 3,500원@@@"
];
const searchResult = [];
for (let item of list) {
searchResult.push(searchWord(item, 아이스아메리카노));
}
console.log(searchResult);