![](/img/trans.png)
[英]How to split a string on substrings with set of characters in 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.