2016-07-23 164 views
4

我想改變在字符串中的字符與許多值如何替換字符串中的字符有許多字符

我有串這樣的:

date_format = "%m/%d/%Y"; 

,我想,以取代日益%焦炭這之後,所以日期變量應該是這樣的:

date_format="mm/dd/YY"; 

這裏是我試過到目前爲止,但我不能得到它的工作,所以我在這裏需要一些幫助:

function replaceon(str, index, chr) { 
    if (index > str.length - 1) return str; 
    return str.substr(0, index) + chr + str.substr(index + 1); 
} 

function locations(substring, string) { 
    var a = [], 
     i = -1; 
    while ((i = string.indexOf(substring, i + 1)) >= 0) a.push(i); 
    return a; 
} 

function corrent_format(date_format) { 
    var my_locations = locations('%', date_format); 
    console.log(my_locations.length); 
    for (var i = 0; i < my_locations.length; i++) { 
     replaceon(date_format, my_locations[i], date_format[my_locations[i] + 1]); 
    } 
    return date_format; 
} 

console.log(corrent_format(date_format)); 

回答

3

您可以使用該正則表達式:

var date_format="%m/%d/%Y"; 
 
var res = date_format.replace(/%(.)/g, "$1$1"); 
 

 
console.log(res);

+0

它的工作完美:)謝謝 –

1

function act(str) { 
 
    var res = ""; 
 
    for (var i = 0; i < (str.length - 1); i++) { 
 
    if (str[i] === "%") 
 
     res += str[i + 1]; 
 
    else 
 
     res += str[i]; 
 
    } 
 
    res += str[i]; 
 
    return res; 
 
} 
 
var date_format = "%m/%d/%Y"; 
 
console.log(act(date_format));

+0

它的工作完美:)謝謝 –

4

你可以試試這個:

"%m/%d/%Y".replace(/%([^%])/g,"$1$1") 

希望能得到這些結果。

+0

它的工作完美:)謝謝 –

1

您的代碼不能正常工作,因爲date_format變量未被corrent_format函數修改。 replaceon函數返回一個新的字符串。如果結果分配給date_format,你應該得到預期的結果:

for (var i = 0; i < my_locations.length; i++) { 
    date_format = replaceon(date_format, my_locations[i], date_format[my_locations[i]+1]) 
} 

或者,您可以執行使用String.replace更換和正則表達式:

date_format.replace(/%(.)/g, '$1$1'); 
+0

它的工作完美:)謝謝 –

1

對於正則表達式,挑戰我們中間,這裏的翻譯/%(.)/g, '$1$1'

  • /意味着下一部分將是正則表達式。
  • %找到一個%
  • .任何單個字符,所以%.會匹配%m,%d和/或%Y。
  • (.)把它放在parens中意味着捕獲稍後使用的值。
  • /g獲取源字符串中的所有匹配(而不是第一個)。
  • ?1引用我們在(.)之前捕獲的值。
  • ?1?1重複兩次捕獲的值。

因此,用.中的所有值替換%.兩倍。

現在,這個正則表達式是最簡潔快捷的方式來完成手頭的工作。但也許你不能使用正則表達式。也許你有一個誦讀困難的老闆,已經取締了他們的使用。 (誦讀困難症和正則表達式是充滿不安的同伴。)也許你還沒有在正常表達式中尖叫47個小時,這些表達式並沒有按照你想要的那樣做,你必須在允許使用它們之前投入。或者,也許你只是討厭正則表達式。

如果這些應用,你也可以這樣做:

var x = '%m/%d/%y'; 
x = x.replace('%', 'm'); 
x = x.replace('%', 'd'); 
x = x.replace('%', 'y'); 
alert(x); 

這需要的事實replace功能只替換找到的第一個比擬的優勢。

但嚴重的是,不要使用這個。使用正則表達式。將20小時的投資用於制定正則表達式,將15分鐘內寫入的20行代碼壓縮到1分鐘總是更好。除非你必須在今晚的某個時候完成它,並且無論你正在嘗試什麼都行不通,而且已經接近午夜了,而且你會感到疲倦......呃,不。使用正則表達式。真。抵制避免找到正則表達式解決方案的誘惑力。當你早晨在辦公桌上醒來,錯過了最後期限,並回家後,花更多時間陪伴家人時,你會很高興你做到了這一點,禮貌慷慨的遣散費包。

+0

所有開玩笑之外,我用正則表達式只要我能做到,尤其是如果我可以刷卡是別人其他人已經寫了。 – BobRodes