這是一個有趣的 - 我正在構建一個褻瀆檢查器!
出于本練習的目的,讓我們有一組禁用詞,如下所示:
const forbiddenWords = ['apples', 'oranges', 'blue carrots', 'mushy green peas'];
然后我將有一個輸入欄位供用戶輸入內容。它可能是一個無限的單詞組合,但我想找到所有禁用單詞的實體并將它們作為陣列回傳。我已經想到了這個功能,它讓我非常接近:
const forbiddenWords = ['apples', 'oranges', 'blue carrots', 'mushy green peas'];
const userInput = 'Broccoli is my favorite food. I hate oranges and blue carrots';
const checkIfValidInput = () => {
// Will return an array that looks like: ['Broccoli', 'is', 'my', 'favorite', ...]
const splitWords = userInput.split(" ");
const array = [];
for (let i in forbiddenWords) {
if (splitWords.indexOf(forbiddenWords[i]) !== -1) {
array.push(forbiddenWords[i]);
}
}
return array.sort((x, y) => x - y);
};
運行上面的代碼將使陣列的結果為['oranges', 'blue', 'carrots']. 我怎樣才能建立一個功能來檢查'blue carrots'或'mushy green peas'全部?我希望上述函式回傳:['oranges', 'blue carrots']。想法?
uj5u.com熱心網友回復:
您可以在這種情況下使用正則運算式。這也將使您能夠匹配不區分大小寫的情況
const checkIfValidInput = () => {
const forbiddenWords = ['apples', 'oranges', 'blue carrots', 'mushy green peas'];
const userInput = 'Broccoli is my favorite food. I hate oranges and blue carrots';
const result = forbiddenWords.reduce((acc, words) => {
const match = userInput.match(new RegExp(words, ['gi']))
return match ? acc.concat(match) : acc
}, [])
result.sort()
console.log(result)
}
checkIfValidInput()
此外,array.sort((x, y) => x - y);不需要,因為您擁有的值是字串。您可以依靠,array.sort()或者如果您真的想進行手動排序,請嘗試string.localeCompare(string2)
uj5u.com熱心網友回復:
您可能最好創建一個正則運算式。這樣,您可以跳過下一個拆分并忽略大小寫問題
你可以這樣做
var regexStr = "";
for (let i = 0; i < forbiddenWords.length; i ) {
if (i != 0) regexStr = "|";
regexStr = "(" forbiddenWords[i] ")";
}
var regex = RegExp.compile(regexStr,"gim");
var matches = userInput.match(regex);
uj5u.com熱心網友回復:
您可以使用每個短語檢查句子是否匹配,如果匹配,則可以回傳該短語并將其存盤在變數中。
從技術上講,使用 filter() 和 includes() 可以解決這個任務。讓我知道它是否有幫助。
let matched = forbiddenWords.filter(phrase => {
if(userInput.includes(phrase)) return phrase;
});
return matched;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404652.html
標籤:
上一篇:有沒有更好的方法來清潔字串?
