Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   вопрос по замене символов в конкретной строке (https://javascript.ru/forum/dom-window/23388-vopros-po-zamene-simvolov-v-konkretnojj-stroke.html)

Pavel M. 23.11.2011 11:54

Цитата:

Сообщение от BoSO
C помощью split и разбиение на массив вариант не подходит. Я и сам точно так делал!

сегодня с утра в голову пришел вариант без split,
но с callback - тоже как-то не красиво, надеюсь кто-то поможет написать короче

var t = 'Привет! большой текст Привет! большой текст. Привет! большой текст Привет! большой текст. Привет! большой текст Привет! большой текст.';
 
t = t.replace(/^[^\.]+/, function (s) { // сначала взял все до первой точки
    return s.replace(/Привет/g, 'Здрасте'); // в этом куске замена
});
 
alert(t);

trikadin 23.11.2011 18:47

Pavel M., самый нормальный вариант) Так что всё ок)

BoSO 23.11.2011 18:51

Можно заюзать такой вариант

function replaceText() {
var objTextArea = document.getElementById("textarea");
objTextArea.value = replaceTestForFirstSentence(objTextArea.value);
}

function replaceTestForFirstSentence(str) {
var re = /([\w\s]{0,}привет[\w\s]{0,}\.)([\w\s\.\?]{0,})/i;
re.exec(str);
var first = RegExp.$1;
var rest = RegExp.$2;
first = first.replace(/привет/gi, 'ЗДРАСТЕ');
return first + rest;
}

trikadin 23.11.2011 18:54

BoSO, он на порядок хуже варианта Pavel M..

Спросите у этого своего программиста, написал ли он сам такую регулярку)

Если да - выложите, даже интересно)

BoSO 23.11.2011 21:05

to trikadin
абсолютно согласен, вариант от Pavel M. самый крутой!

может у кого еще какие будут???

melky 23.11.2011 22:23

Цитата:

Сообщение от Pavel M. (Сообщение 138535)
var t = 'Привет! большой текст Привет! большой текст. Привет! большой текст Привет! большой текст. Привет! большой текст Привет! большой текст.';
 
t = t.replace(/^[^\.]+/, function (s) { // сначала взял все до первой точки
    return s.replace(/Привет/g, 'Здрасте'); // в этом куске замена
});
 
alert(t);

Цитата:

Сообщение от Pavel M. (Сообщение 138302)
var t = 'Привет! большой текст Привет! большой текст. Привет! большой текст Привет! большой текст.';

var tSplit = t.split('.');
tSplit[0] = tSplit[0].replace(/Привет/g, 'Здрасте'); 

alert(tSplit.join('.'));

примерно одинаково работают :) дёргают кусок текста до точки и в нём всё заменяют.

trikadin 23.11.2011 22:44

Цитата:

Сообщение от melky
примерно одинаково работают

Второй быстрее.

Aetae 23.11.2011 22:48

На тексте из второго примера можно и одной регуляркой обойтись
var t = 'Привет! большой текст Привет! большой текст. Привет! большой текст Привет! большой текст.';
alert(t.replace(/Привет(?=[^.]*\..+)/g,'Здрасте'))

Только толку никакого)

trikadin 23.11.2011 23:16

Aetae, ну понятно, но хочется-то универсальности)

Хотя, может, задание в этом и состояло)


Часовой пояс GMT +3, время: 14:53.