2017-07-23 41 views
0

您好我有一個文本像 更換令牌「歡迎回來@@名字@@姓氏。你@@日期上次訪問」使用JavaScript字符串分割

我的目標是取代這些標記與實際值。

所以我所做的就是

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date; 
var data = str.split('@'); 

我的想法是 - 一旦我這樣做,我的數據將具有值類似

["Welcome back", "@FirstName" , "@LastName", "You Last accessed on" , "@Date"] 

一旦我有這個,我可以很容易的數組替換標記,因爲我知道哪一個是屬性,哪一個是靜態字符串。但是,因爲JS有其他想法,所以我很愚蠢。 它將其分割爲:

["Welcome back ", "", "Firstname ", "", "Lastname. You Last accessed on ", "", "Date"] 

我在做什麼錯?或者什麼是替換字符串中令牌的最好方法?我看了here。不太喜歡這個方法。不是大括號的粉絲。想做到這一點的「@」的方式 - 因爲它會很容易爲內容創作者

+0

拆分將在字符串中的每個@上分割 –

+0

*我的目標是用實際值替換這些標記。* - 我想你會希望'.replace'而不是'.split' – James

回答

2

另一個正則表達式選項,各執/@(@\w+)[^\[email protected]]+/,捕獲名稱部分,同時擺脫第一@,假設標識符是由字字符的名稱:

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date;" 
 
var data = str.split(/@(@\w+)[^\[email protected]]+/); 
 
console.log(data.filter(s => s !== ""));

-3

做到這一點:

data = str.replace("@@Firstname", "Robert").replace("@@Lastname","Polson").replace('@@Date','yesterday') ; 
2

您可以分割"@"字符,後面跟着"@"字符

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date"; 
 

 
var res = str.split(/@([email protected])/); 
 

 
console.log(res);

+0

很好的答案。不知道你可以拆分正則表達式 – m0meni

+0

'RegExp'也可以組成'/ [^ @] @ /' – guest271314

+0

真棒..謝謝:)。同意@ AR7。從不知道正則表達式的分割。我不能接受這是另一個8分鐘的答案。之後會這麼做:) –

0

由於您的delemiters以空格結尾,可能會被空格拆分:

.split(" ") 

然後遍歷和替換所有單詞,@@

開始
var replaceBy={ 
lastname:"Doe", 
name:"John" 
} 

var result= input.split(" ").map(function(word){ 
if(word[0]=="@" && word[1]=="@"){ 
    return replaceBy[word.substr(2)] || "error"; 
} 
return word: 
}).join(" "); 

但是,它可能是更容易delemiters如要suround您的標識符:

Hi @@[email protected]@! 

所以,你可以做

.split("@@") 

每個第二個元素都是自動標識符。

+0

不幸的是,這可能不是真的。雖然在上面的例子中是真的,但我可以有一個像「Welcome @@ Firstname,@@ Lastname」這樣的句子。 @@是我確信的唯一標誌 –

+0

@night monger,但是很難真正得到標識符,例如在你的例子中,它是*日期*還是*日期; *? –

+0

這是一個錯字。實際的字符串是「Welcome back @@ Firstname @@ Lastname。您上次訪問的日期是@@ Date」;令牌本身永遠是一個單獨的詞。 –

0

您可以用某個字符替換'@@',然後用'@'替換',@',然後替換該新字符。

var str = "Welcome back @@Firstname @@Lastname. You Last accessed on @@Date"; 
 
var data = str.replace(/@@/g, ',@').split(','); 
 
console.log(data);