[英]Regex pattern between symbols
我有一個這樣的數據對象
var myData = {
"birthYear" : "1956",
"name" : "Bryan Lee Cranston"
"birthPlace" : "California"
}
和這樣的變量
var myInfoText = #name# born #birthYear#, is an actor, and producer. He is best known for #best_known#";
現在,我需要一個函數來檢查myInfoText中的#sample#模式。 如果在其中找到此模式,則將檢查此鍵的myData對象屬性,並在此屬性值的幫助下替換myInfoText變量。
最后,我期待這樣的事情:
布萊恩·李·克蘭斯頓(Bryan Lee Cranston), 1956年出生,是演員和制片人。 他以“#best_known#”而聞名。
我知道我可以使用正則表達式來做到這一點,但是無論我多么努力,我都對我不滿意,因此相信我。 謝謝。
像這樣:
function parseTemplate(str, data){
return str.replace(/#([^#]+)#/g, function($0, $1){
return data.hasOwnProperty($1) ? data[$1] : $0;
})
}
現在,在您的示例中使用此功能:
parseTemplate('#name# born #birthYear#, is an actor, and producer. He is best known for #best_known#', {
"birthYear" : "1956",
"name" : "Bryan Lee Cranston",
"birthPlace" : "California"
});
將返回:
"Bryan Lee Cranston born 1956, is an actor, and producer. He is best known for #best_known#"
假設您有jQuery,則可以像這樣遍歷對象:
var myData = {
"birthYear" : "1956",
"name" : "Bryan Lee Cranston",
"birthPlace" : "California"
};
var myInfoText = '#name# born #birthYear#, is an actor, and producer. He is best known for #best_known#';
$.each(myData, function(key, value) {
var regex = new RegExp('#' + key + '#', 'g');
myInfoText = myInfoText.replace(regex, value);
});
console.log(myInfoText);
如果沒有jQuery,則需要以另一種方式遍歷對象。 重要的部分是回調函數中的正則表達式。
編輯:我向RegExp
添加了一個全局修飾符,以防萬一有重復的鍵(感謝@ h2ooooooo)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.