簡體   English   中英

有效搜索字符串 Javascript 中的子字符串集

[英]Effectively Search for set of substrings in a string Javascript

我目前有一個字符串和一組子字符串/搜索字符串,我想在給定的字符串中進行有效搜索。 這是我目前擁有的:

const apple = "apple"
const banana = "banana"
const chickoo = "chickoo"
const dates = "dates"
const eggplant = "eggplant"
const default = "default"

let string = "foobar" // This String changes dynamically
if (string.includes(apple)){
    return apple;
} else if (string.includes(banana)) {
    return banana;
} else if (string.includes(chickoo)) {
    return chickoo;
} else if (string.includes(dates)) {
    return dates;
} else if (string.includes(eggplant)) {
    return eggplant;
} else {
    return default;
}

這種方法有效,但是我正在尋找一種更緊湊、更有效的方法來搜索給定字符串中的子字符串。

編輯:我目前正在使用以下方式:

const fruits = ["apple", "banana", "chickoo", "dates", "eggplant"];
let string = "foobar" //This is dynamic
for(let fruit in fruits) {
    if(string.includes(fruits[fruit])){
        return fruits[fruit];
    }
}
return "default";

讓我知道是否有比上述方法更有效的方法。

使用正則表達式:

function matchFruit(input) {
    const match = input.match(/apple|banana|chickoo|dates|eggplant|default/);
    if(match)
        return match[0];
    return "default";
}

筆記

這只會返回字符串中第一個匹配的水果。 所以"foobarapplebanana"將返回"apple" 相反,如果您想返回一個字符串數組[ "apple", "banana" ] ,則返回match而不是match[0]

在這里測試

您可以使用filter()

let string = "foobar" //This is dynamic
var matchingFruits =  fruits.filter(fruit=>string.includes(fruit))
return matchingFruit.length>0?matchingFruit[0]:"default"

您可以在一行中檢查這些包含。

首先,您必須創建可用列表,然后檢查它。 如果未在列表中找到,則返回默認值。

const apple = "apple"
const banana = "banana"
const chickoo = "chickoo"
const dates = "dates"
const eggplant = "eggplant"
const default = "default"

let string = "foobar" // This String changes dynamically

const availableFruits = [apple, banana, chickoo, dates, egplant]

return availableFruits.includes(string) ? string : default;

這取決於。

正則表達式可以給你一個簡單的答案:

found = string.replace(/.*(apple|banana|cherry).*/,"$1")

但是,如果有很多搜索字符串(如整個字典)並且您只有相對較短的文本,則反向方法可能會更有效:構建您擁有的單詞列表,並根據字典中的單詞 object 檢查它們鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM