Mam dwie zmienne i muszę wstawić ciąg b
do ciągu a
w punkcie reprezentowanym przez position
. Wynik, którego szukam to „Chcę jabłka”. Jak mogę to zrobić za pomocą JavaScript?
var a = 'I want apple';
var b = ' an';
var position = 6;
javascript
Sami
źródło
źródło
var output = [a.slice(0, position + 1), b, a.slice(position)].join('');
nadanie OP „Chcę jabłka”, zamiast „Chcę jabłka”.Edycja: zastąpiona
.substr
przez.substring
ponieważ.substr
jest teraz starszą funkcją (na https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )źródło
String.prototype.substr
jest już przestarzałe. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…substring
w tym przypadku jest bezpośrednim zamiennikiem dla przestarzałasubstr
, więc odpowiedź będzie:var output = a.substring(0, position) + b + a.substring(position);
..substring
Możesz dodać tę funkcję do klasy string
abyś mógł użyć go na dowolnym obiekcie łańcuchowym:
źródło
Korzystanie z literałów łańcuchowych ES6 byłoby znacznie krótsze:
źródło
Może nawet lepiej, jeśli określisz pozycję za pomocą indexOf () w następujący sposób:
następnie wywołaj funkcję w następujący sposób:
Zauważ, że wstawiam spację po „an” w wywołaniu funkcji, a nie w instrukcji return.
źródło
Underscore.String biblioteka posiada funkcję, która robi Insert
lubię to
źródło
próbować
Pokaż fragment kodu
lub wyrażenie regularne
Pokaż fragment kodu
źródło
Byłoby to wolniejsze, ale zajmie się dodaniem miejsca przed i po. Również będziesz musiał zmienić wartość pozycji (do 2, teraz jest bardziej intuicyjna)
źródło
Szybka naprawa! Jeśli nie chcesz ręcznie dodawać spacji, możesz to zrobić:
(edytuj: widzę, że tak naprawdę na powyższą odpowiedź odpowiem, przepraszam!)
źródło
Jeśli lookbehind ES2018 jest dostępny , jedno rozwiązanie bardziej regexp, że korzysta z niego do „zastąpienia” przy zerowej szerokości pozycji po znaku n-ty (podobny do @Kamil Kiełczewski, ale bez zapisywania początkowych znaków w grupie przechwytywania):
Pokaż fragment kodu
źródło
Cóż, tylko mała zmiana, ponieważ powyższe rozwiązanie daje wynik
zamiast
Aby uzyskać wynik jako
użyj następującego zmodyfikowanego kodu
źródło