Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена подстроки в строке (https://javascript.ru/forum/misc/61632-zamena-podstroki-v-stroke.html)

simple 27.02.2016 03:01

Замена подстроки в строке
 
Друзья помогите пожалуйста написать регулярное выражение для замены подстрок в строке. Например есть строка из слов с дефисом разделенные пробелом: "верх-низ лево-право назад-вперед".

Нужно сделать поиск по первому словосочетанию перед дефисом и заменить словосочетание полностью.

Например найти все словосочетание начинающие на "верх-" и заменить его на "верх-право". Строковыми функциями я это реализовал, но получилось громоздко, может есть какой нибудь более элегантный способ?

Dilettante_Pro 27.02.2016 09:10

simple,
Преобразовать строку в массив при помощи split по пробелам и по элементам менять что хочется, потом снова собрать строку

ruslan_mart 27.02.2016 09:26

var str = 'верх-низ лево-право назад-вперед';

alert(str.replace(/(?:\s|^)верх\s*-\s*[а-яё]+/gi, 'верх-право'));

рони 27.02.2016 09:30

simple,
var str = "верх-низ лево-право назад-вперед";
str = str.replace(/(верх-)\S+/g,"$1право");
alert(str)

simple 27.02.2016 12:30

Всем большое спасибо за ответы. Вот вариант у Рони мне понравился, а можно его немного изменить что бы искало без дефиса, т.е просто по первому слову и заменяло его? Спасибо.

рони 27.02.2016 12:35

simple,
непонял ... ну уберите - :-?

simple 27.02.2016 12:41

рони,пробовал, не получается :no:

рони 27.02.2016 12:53

simple,
пишите код без - и какой должен быть результат

рони 27.02.2016 12:59

simple,
var str = "верх-низ лево-право назад-вперед верховье";
str = str.replace(/(^|\s)верх\S+/g,"$1абракадабра");
alert(str)

simple 27.02.2016 13:01

рони, например
var str = "верх верх-низ влево-вправо назад-вперед";
str = str.replace(/(?:верх)\S+/g,"верх-вправо");
alert(str)

найти "верх" и заменить его на "верх-вправо". Т.е искомые слова могут быть как с дефисом так и без.

В вашем примере абракадабра затирает верх.


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