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)

BoSO 22.11.2011 04:38

вопрос по замене символов в конкретной строке
 
Помогите написать регесп!
Например,есть большой текст с множеством предложений и встречающегося там слова ПРИВЕТ!
Нужно заменить все слова ПРИВЕТ на ЗДРАСТЕ но только до первой "точки".

Pavel M. 22.11.2011 10:57

первое что пришло с утра в голову
ниже

var t = 'Привет! большой текст Привет! большой текст. Привет! большой текст Привет! большой текст.';

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

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

BoSO 22.11.2011 19:05

C помощью split и разбиение на массив вариант не подходит. Я и сам точно так делал! Задача поставленна написать условие с помощью регулярного выражения

Pavel M. 22.11.2011 21:21

Цитата:

Сообщение от BoSO
Задача поставленна ...

кем поставлена ?

BoSO 22.11.2011 22:43

Цитата:

Сообщение от Pavel M. (Сообщение 138420)
кем поставлена ?

дружком-программером...учит меня JavaScript и дает задачки

trikadin 22.11.2011 22:51

Цитата:

Сообщение от BoSO
дружком-программером...учит меня JavaScript и дает задачки

И вы надеетесь его выучить, прося нас написать за вас это решение?

Вдумчивого изучения статьи по регэкспам на этом сайте с головой хватит, чтобы сделать то, что вам требуется.

Kolyaj 22.11.2011 23:43

Цитата:

Сообщение от BoSO
дружком-программером...учит меня JavaScript и дает задачки

Я наверно чего-то не понимаю в этом мире. Я понимаю, когда просят сделать задание, данное в школе/колледже/универе. Но когда друг пытается тебя чему-то научить, тратит на тебя своё время, у меня возникает вопрос: а тебе-то это нахрена?

trikadin 22.11.2011 23:45

Цитата:

Сообщение от Kolyaj
Я наверно чего-то не понимаю в этом мире. Я понимаю, когда просят сделать задание, данное в школе/колледже/универе. Но когда друг пытается тебя чему-то научить

Просто как привыкли в школе/колледже, так и всю жизнь потом...

Одна из наибольших отстойностей школы - количество домашних заданий погребает под собой желание их делать.

Kolyaj 22.11.2011 23:47

Цитата:

Сообщение от trikadin
Просто как привыкли в школе/колледже, так и всю жизнь потом...

Нее, в школе учатся, потому что там нельзя не учится. В универ идут, чтобы в армию не идти, или тупо вышку получить. Но друг-то учит явно не для галочки.


Цитата:

Сообщение от trikadin
Одна из наибольших отстойностей школы - количество домашних заданий погребает под собой желание их делать.

Ну тут уже другая проблема: каждый учитель считает, что его предмет единственный :)

trikadin 22.11.2011 23:57

Цитата:

Сообщение от Kolyaj
Но друг-то учит явно не для галочки.

Но привычка-то осталась! :D

Цитата:

Сообщение от Kolyaj
Ну тут уже другая проблема: каждый учитель считает, что его предмет единственный

Мда, есть такое)

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, время: 01:17.