我有一個包含幾個動態關鍵字的字串模板,例如:
I am {{name}} from {{city}}
對于給定的輸入字串,我想將它與模板進行匹配,并從 Javascript 的輸入中提取名稱和城市。例如。輸入I am Alex from Paris應該給我命名為Alex和城市為Paris。
在 Javascript 中是否有一些標準的方法來執行這樣的操作?
uj5u.com熱心網友回復:
如果您可以控制模板,則可以將其設為使用命名捕獲組的正則運算式(?<groupName>),然后.match()在字串上使用以獲取匹配的組:
const template = /^I am (?<name>[^ ] ) from (?<city>[^ ] )$/;
const str = "I am Alex from Paris";
const {groups} = str.match(template);
console.log(groups);
如果需要將模板保留為字串,也可以將模板決議為上述正則運算式,但如果模板由用戶提供,則可能需要對其進行轉義。小例子:
const templateToRegExp = (strTemplate) => {
const regTemp = strTemplate.replace(/{{([^}}] )}}/g, "(?<$1>[^ ] )");
return new RegExp(`^${regTemp}$`);
}
const template = "I am {{name}} from {{city}}";
const regexp = templateToRegExp(template);
const str = "I am Alex from Paris";
const {groups} = str.match(regexp);
console.log(groups);
uj5u.com熱心網友回復:
一種方法是使用正則運算式。由于您已經知道字串的結構,您可以將字串的各個部分組合在一起并始終提取相同的部分。一個缺點是每次更新模板字串時都需要更新正則運算式。
例如:
使用以下正則運算式:
^(I am )(.*)( from )(.*)$
將導致 4 組。第二組將是名稱的值,第四組將是城市的值
在https://regex101.com/r/7tl7Ap/1 上通過一些示例查看它的實際效果
uj5u.com熱心網友回復:
在這種情況下,我們使用模板文字。而不是使用單引號或雙引號定義字串 (`) 并使用美元符號 ($) 傳遞變數
例如:
`I am ${name} from ${city}`
uj5u.com熱心網友回復:
var string = 'my name is var';
var data = 'pratik';
console.log(string.replace("var", data))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367448.html
標籤:javascript 正则表达式 细绳
上一篇:反應動態輸入表單顯示錯誤一些問題
下一篇:如何Vuev-if等于或包含
