我想獲得下面示例中列出的所有類別的水果和肉類,但不是強制性的,但如果存在,我仍然希望獲得強制性:
categories fruit meat mandatory
我試圖從匹配除指定字串之外的所有內容中激發靈感
https://regex101.com/r/peXJXx/1
/(categories )(^(?!. (mandatory)))(mandatory)?/gis
但不能讓它作業
uj5u.com熱心網友回復:
如果您堅持使用正則運算式,這可能就是您想要的。
const input = "categories fruit meat mandatory";
const regex = /\w /gm;
const regex2 = /^\w /g;
const results = input.matchAll(regex);
let type = input.match(regex2)[0];
let isMandatory = false;
let isCategory = false;
let categories = [];
for (const result of results){
switch(result[0]){
case "categories": isCategory = true; break;
case "mandatory": isMandatory = true; break;
default: categories.push(result[0]);
}
}
console.log("Type: " type);
console.log("Categories: " categories.join(", "));
console.log("Mandatory: " (isMandatory ? "Yes" : "No"));
Type: categories
Categories: fruit, meat
Mandatory: Yes
你可以隨心所欲地修飾它。本質上,如果您有多個輸入,您將遍歷每個字串并運行此代碼。如果您有其他型別而不是類別,則可以添加類似isDepartment = false然后在開關中執行的內容case "departments": isDepartment = true; break;。
您也可以只修改正則運算式以忽略第一個單詞并創建第二個正則運算式模式來識別第一個單詞的具體含義const regex2 = /^\w /g;,然后執行let type = input.match(regex2)[0];.
這是一個現場樣本 https://jsfiddle.net/gey3oqLp/1/
編輯:其實作在我想起來了。如果我們要切換路由,我們不需要匹配正則運算式中的任何特定內容。我們只需要匹配每個單詞并在以后處理它。我已將正則運算式更新為更簡單的版本。
uj5u.com熱心網友回復:
const r = 'categories fruit meat mandatory';
const [, ...categories] = r.split(' ').filter(_ => _ !== 'mandatory');
對于這樣的問題,您不需要正則運算式,我使用 split(' ') 將字串拆分為單詞(將其轉換為陣列),然后從“強制”中過濾它們,我還使用解構來洗掉第一個元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483114.html
標籤:javascript 正则表达式
