我想要做的是取一個字符串,如this.those.that
,並從第n次出現字符時得到一個子字符串。因此,從字符串開始到.
的第二次出現將返回this.those
。同樣,從第二次出現.
到字符串的末尾將返回that
。對不起,如果我的問題很模糊,解釋起來並不容易。另外,請不要建議做額外的變量,結果將在字符串中而不是數組。在第n次出現字符時剪切字符串
回答
你可以在沒有數組的情況下做到這一點,但它需要更多的代碼並且可讀性較差。
通常,您只想使用盡可能多的代碼來完成工作,這也增加了可讀性。如果您發現此任務正在成爲性能問題(基準測試),則可以選擇然後,您可以決定開始重構性能。
var str = 'this.those.that',
delimiter = '.',
start = 1,
tokens = str.split(delimiter).slice(start),
result = tokens.join(delimiter); // those.that
我認爲結果應該是「this.those」和「that」? – tvanfosson 2011-03-31 02:45:16
@tvanfosson也許我誤解了這個問題,但它被接受:) – alex 2011-03-31 03:10:24
哇,這個答案是驚人的,謝謝亞歷克斯! – iamserious 2011-09-14 17:05:02
我困惑,爲什麼你想用字符串函數做的事情純粹,但我想你可以做類似如下:
//str - the string
//c - the character or string to search for
//n - which occurrence
//fromStart - if true, go from beginning to the occurrence; else go from the occurrence to the end of the string
var cut = function (str, c, n, fromStart) {
var strCopy = str.slice(); //make a copy of the string
var index;
while (n > 1) {
index = strCopy.indexOf(c)
strCopy = strCopy.substring(0, index)
n--;
}
if (fromStart) {
return str.substring(0, index);
} else {
return str.substring(index+1, str.length);
}
}
不過,我強烈主張像Alex的簡單得多的代碼。
+ +1努力:) – 2012-10-30 14:52:29
如果你真的要堅持字符串的方法,那麼:
// Return a substring of s upto but not including
// the nth occurence of c
function getNth(s, c, n) {
var idx;
var i = 0;
var newS = '';
do {
idx = s.indexOf(c);
newS += s.substring(0, idx);
s = s.substring(idx+1);
} while (++i < n && (newS += c))
return newS;
}
試試這個:
"qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){3}/, '');
"xcv.xcv.x"
"qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){**nth**}/, '');
- 這裏是第n次是發生的去除量。
萬一有人需要兩個「this」和「those.that」的亞歷克斯在他comment描述的方式,這裏是一個修改後的代碼:
var str = 'this.those.that',
delimiter = '.',
start = 1,
tokens = str.split(delimiter),
result = [tokens.slice(0, start), tokens.slice(start)].map(function(item) {
return item.join(delimiter);
}); // [ 'this', 'those.that' ]
document.body.innerHTML = result;
- 1. 在給定字符第n次出現時分割字符串
- 2. 如何在第n次出現字符後拆分字符串?
- 3. 如何在Java中字符的第N次出現時分割字符串
- 4. 在字符串中剪切字符串
- 5. 替換字符串中出現的第n個子字符串
- 6. Bash:從第一次出現的字符到第二次出現的字符串
- 7. 如何獲得字符串到第n次出現的字符在PHP中?
- 8. 如何更改字符串每第n次出現在php
- 9. 字符串切割,在第一個空格字符修剪
- 10. Xquery按字符的第N個出現拆分字符串
- 11. 第一次替換字符串中出現的字符串VB.NET
- 12. 如何在第一次出現字符後分割字符串?
- 13. 第一次出現分割字符串
- 14. 替換字符串的第n次出現
- 15. 僅在第一次出現字符/分隔符時分割字符串
- 16. 如何在第一次出現字符串時多次使用
- 17. 第一次''後剪下字符串。'
- 18. linux的bash腳本切串字符的第一次出現後
- 19. Mysql剪切字符串,第一個字符?
- 20. 在java中找到字符串中第n個子字符串的出現?
- 21. 如何在第n次出現時將TD字符串拆分爲新行
- 22. 遞歸剪切字符串
- 23. 獲取字符串中字符的倒數第二次出現
- 24. 第一次出現字符串中的字符
- 25. 從字符串剪切零字符(字符串[: - 0]) - Python
- 26. 獲取第二個字符/字符串出現的字符串
- 27. 如何在第一次出現字符時將字符串拆分爲兩個
- 28. 僅在第一次出現指定字符時分割字符串
- 29. SQL在第一次出現字符時將列選擇爲子字符串?
- 30. 如何在字符第三次出現時分割字符串? [android]
任何異議分裂成一個數組,然後連接數組的切片?它使用對字符串進行操作或生成字符串的函數。 – tvanfosson 2011-03-31 02:26:31
看來你已經知道了答案;在分隔符上分割字符串,然後用這些部分重新構建一個新的字符串似乎是最好的選擇。爲什麼限制自己不使用數組? – Tejs 2011-03-31 02:27:05
一個字符串是一個數組。 – Incognito 2011-03-31 02:32:02