|
|
|||||
Split строки по шаблону
доброе утро всем,
какой шаблон использовать чтобы разбить строку по точкам и запятым? Например: "Вы можете выбрать иконку, характеризующую сообщение. Разделяйте теги запятыми." Результат: "Вы можете выбрать иконку,", "характеризующую сообщение.", "Разделяйте теги запятыми." пробовал split({.,}) не работает :\ |
|
|||||
Модрон-ветеринар
|
Решение "в лоб":
var str:String = 'Вы можете выбрать иконку, характеризующую сообщение. Разделяйте теги запятыми,это важно.'; str = str.split(', ').join(','); //убираем из последовательностей ', ' пробел str = str.split(',').join('###'); //заменяем все возможные ',' на спецсимвол ### str = str.split('###').join(',###'); //возвращаем запятую перед спецсимволом ### str = str.split('. ').join('.'); //убираем из последовательностей '. ' пробел str = str.split('.').join('####'); //заменяем все возможные '.' на другой спецсимвол #### str = str.split('####').join('.####'); //возвращаем точку перед другим спецсимволом #### str = str.split('####').join('###'); //приводим все спецсимволы к одному виду var arr:Array = str.split('###'); //бьем строку на результирующий массив for (var i = 0; i < arr.length ; i++) { trace(arr[i]); } Интересны были бы более оптимальные варианты, если кто-то даст.
__________________
Идите первым! Последний раз редактировалось mooncar; 11.11.2011 в 13:39. |
|
|||||
Кстати не слишком тривиальная задачка. Можно слегка сделать более общее решение разве что.
var STR = "Вы можете перевести сумму, характеризующую степень помощи. Храните деньги в сбербанке."; var REZ : Array = new Array(); function removeChars( input, shablon ){ for ( var J=0; J<shablon.length; J++ ) input = input.split(shablon[J]).join("###"); return input.split("###") } REZ = removeChars(STR,[", ",". ",",","."]) for ( var i=0; i<REZ.length; i++ ) trace( REZ[i]) |
|
|||||
Мункар, это решение не "в лоб", а "в печень" =)
Даже если через split/join, то зачем же после ввода собственного спецсимвола вводить еще один, а потом менять его на что-то и еще раз на что-то. А вобще - нужно юзать регекспы. Они не сложные, правда-правда. Банально: Если нужно не терять точки и запятые, прийдется немного усложнить: Но тогда в полученном массиве найденные элементы будут чередоваться с разделителями, т.е.: 0 :'' 1 :'Вы можете выбрать иконку,' 2 :'' 3 :'характеризующую сообщение.' 4 :'' 5 :'Разделяйте теги запятыми.' 6 :'' Получим вот такой массивчик: Ну и потом посклеиваем все, что нам надо. |
|
|||||
crazyone
решение ищется именно для AS2.0 |
|
|||||
Модрон-ветеринар
|
Olesolo, как вам мое решение?
dark256, у тебя условия задачки не выполнены, не сохраняются точки и запятые, они просто вырезаются, это как раз тривиально. Цитата:
Я же указал все в комментариях, что там для чего делается. 1. Первый спецсимовл в моем решении возникает на месте последовательностей "запятая-пробел" и на месте "запятая", при этом образуется последовательность "запятая-спецсимвол-№1". 2. Второй спецсимовл появляется на месте последовательностей "точка-пробел" и на месте "точка", при этом образуется последовательность "точка-спецсимвол-№2". Причем использовать тот же спецсимвол, что и в п.1 нельзя, поскольку предстоит еще обратная замена на точку, то есть точка-спецсимвол-№2 будут именно в месте второго спецсимовла. 3. И на третьем этапе идет подготовка на разбиение в массив, для этого спецсимвол №2 теперь уже можно заменить на спецсимвол №1, унифицировав разметку для разбиения, поскольку точки уже встали на свои места. И сделать наконец split. Про регулярки я знал, но не силен в них.
__________________
Идите первым! Последний раз редактировалось mooncar; 11.11.2011 в 16:43. |
|
|||||
Да, в AS2 с этим грустнее. Недосмотрел расположение темы.
Мункар, я говорил о том, что если сделать вот так, результат не поменяется, а сплит-джойнов будет меньше: var str:String = 'Вы можете выбрать иконку, характеризующую сообщение. Разделяйте теги запятыми,это важно.'; str = str.split(', ').join(','); //убираем из последовательностей ', ' пробел str = str.split(',').join(',###'); //заменяем все возможные ',' на спецсимвол ,### str = str.split('. ').join('.'); //убираем из последовательностей '. ' пробел str = str.split('.').join('.###'); //заменяем все возможные '.' на другой спецсимвол .### var arr:Array = str.split('###'); //бьем строку на результирующий массив for (var i = 0; i < arr.length ; i++) { trace(arr[i]); } |
|
|||||
Модрон-ветеринар
|
Ага, результат такой же, я тоже так собирался, только почему-то логика замен не получалась.
__________________
Идите первым! |
Часовой пояс GMT +4, время: 15:27. |
|
« Предыдущая тема | Следующая тема » |
Теги |
pattern , split , шаблон |
|
|