簡體   English   中英

符號之間的正則表達式模式

[英]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.

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