Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Заменить кавычки в строке (https://javascript.ru/forum/misc/23827-zamenit-kavychki-v-stroke.html)

bohdantheone 07.12.2011 20:42

Заменить кавычки в строке
 
Есть например строка:
Дебютировал наш герой, когда "Реалом" руководил Хорхе Вальдано – человек, отдавший клубу лишь три года как футболист, но немало поработавший в Мадриде после завершения карьеры. Установка Вальдано молодому игроку состояла всего из двух слов: "Твори, парень!".

Как в ней заменить все кавычки " " на « »

devote 07.12.2011 20:52

alert( 'Дебютировал наш герой, когда "Реалом" руководил Хорхе Вальдано – человек, отдавший клубу лишь три года как футболист, но немало поработавший в Мадриде после завершения карьеры. Установка Вальдано молодому игроку состояла всего из двух слов: "Твори, парень!".'.replace(/"([^"]+)"/g, '«$1»') );

e1f 07.12.2011 20:53

var str = 'Дебютировал наш герой, когда "Реалом" руководил Хорхе Вальдано – человек, отдавший клубу лишь три года как футболист, но немало поработавший в Мадриде после завершения карьеры. Установка Вальдано молодому игроку состояла всего из двух слов: "Твори, парень!".'; 
alert( str.replace(/"([^"]*)"/g, '«$1»') );


Я буду всегда обновлять страницу перед постом.

nerv_ 07.12.2011 20:53

bohdantheone, смотрите в сторону RegExp.

bohdantheone 07.12.2011 20:57

всем спасибо!

trikadin 07.12.2011 21:05

bohdantheone, добавлю ложку дёгтя в вашу радость - есть такая гадость, как вложенные кавычки...

devote 07.12.2011 21:08

Цитата:

Сообщение от trikadin
есть такая гадость, как вложенные кавычки...

Это уже из разряда извращения.

bohdantheone 07.12.2011 21:17

trikadin,
да в таком случае не очень весело получается, а такое реально сделать со вложенными?

devote 07.12.2011 21:19

Цитата:

Сообщение от bohdantheone
а такое реально сделать со вложенными?

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

nerv_ 07.12.2011 21:29

Цитата:

Сообщение от bohdantheone
такое реально сделать со вложенными?

Лично мне дело с RegExp иметь не приходилось, но, думаю, возможно. Разумеется, не без извращений :)
Алгоритм вижу такой:
- считаем кол-во кавычек в тексте
- если число четное, значит в оригинале они расставлены правильно, если нет :lol:
- делим его (это число) пополам, ну или +1 а потом пополам
- первую половину заменяем левыми («), вторую правыми (»)

эт все в рамках вложенных) Хотя смотря насколько они вложены и как сложно они вложены. Лучше на замарачиваться)

и все равно не получиться не фига как я рассказал :D Все. Хватит на сегодня. Голова соображать перестала. Чушь выдает))

bohdantheone 07.12.2011 21:31

nerv_,
О_о

trikadin 07.12.2011 21:49

nerv_, не совсем понял... То есть в тексте типа такого:
Цитата:

Стандартом языка "Javascript" является стандарт "ECMAScript"
кавычки выстроятся вот так:
Цитата:

Стандартом языка «Javascript« является стандарт »ECMAScript»
?

Я предлагаю смотреть по пробелам и знакам препинания. Если слева - кавычка открывающая. Справа - закрывающая. В частности, этот способ позволит ловить такие штуки:
Цитата:

«Цыганы» мои не продаются вовсе», — сетовал Пушкин.
Кстати, по этой же причине проверка на баланс кавычек неуместна.

devote 07.12.2011 22:11

ну тады вот, по принципу прдложенному trikadin
alert( 'Стандартом языка "Javas"cript". является стандарт "ECMAScript", "blah - "test" tratata"'.replace(/(^|\s)"/g, "$1«").replace(/"([\s,.!?\-()]|$)/g, "»$1") );

trikadin 07.12.2011 22:15

devote, круто) А то я что-то совсем обленился... Пустая болтовня, а кода нет)

Плюс поставить не могу только...

bohdantheone 08.12.2011 00:00

devote,
действительно здорово!

e1f 12.12.2011 19:40

Хм. А как, простите, алгоритм распознает, какая из одинаковых кавычек открывающая, а какая -- закрывающая? ;) Боюсь, regexp'ом при такой постановке задачи не ограничишься.

alert( 'Стандартом языка "Javas"cript". является стандарт "ECMAScript", "blah - "test": tratata"'.replace(/(^|\s)"/g, "$1«").replace(/"([\s,.!?\-()]|$)/g, "»$1") );

trikadin 12.12.2011 19:53

e1f, не понял... Что вам не нравится?

e1f 12.12.2011 20:11

trikadin,
запустите тот код, что в моем посте :)
как минимум, нужно еще добавить "граничных" символов в регексп.

devote 12.12.2011 22:11

Цитата:

Сообщение от e1f
как минимум, нужно еще добавить "граничных" символов в регексп.

никто и не претендовал на идеальность.

trikadin 12.12.2011 22:12

Цитата:

Сообщение от e1f
запустите тот код, что в моем посте

Ну вы бы хоть выделили, о чём говорите) А то непонятно же) Пять минут втыкал...

Цитата:

Сообщение от e1f
как минимум, нужно еще добавить "граничных" символов в регексп.

Имеется в виду, что их мало? Ну да, согласен. Но это просто общий концепт, не готовая реализация, на мой взгляд. Может, автор не согласится)


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