Разбор строки
Добрый вечер, есть такой вопросик, хочу сделать теги для картинок,
видел на яндексе клёво сделано, вводишь в строку слова ( по видимому сепаратор запятая ии точка с запятой) и он разбирает строку, если надо удаляет дубликаты и выводит в другуб строку, подскажите как реализовать ? Заранее спасибо |
function Razbor(txt){ var arr = txt.split(",") ... дальше убираем дубликаты: (запрос в гугл:javascript array дубликаты) var newtxt = removeDuplicateElement(arr) document.getElementById('drugaya_stroka').value = newtxt } |
А если в тексте встречаются одновременно два сепаратора ?
|
http://javascript.ru/String/match
с параметрами ig, что-то типа: /(.*)[,;](.*)/ig если параметров всего два ,; можно сначала split(",") а потом по полученному массиву for split(";"), это если с регулярками плохо, но лично мне регулярка лаконичнее |
txt.split(/,|;/) |
просто respect !!!
Спасибо подошло :) |
Не на js, но суть видна, а именно: все кроме \\-\\wа-я становится разделителями.
foreach (string word in Regex.Replace(searchText, "[^\\-\\wа-я]+", " ", RegexOptions.Compiled | RegexOptions.IgnoreCase).Trim().Replace("_", "[_]").Split(' ')) { } |
str.match(/([^,;])+/ig) Но у Kolyaj, лаконичнее :) |
Вот данный ворпос решён, но тут возник по ходу ещё один,
я слова отфильтровываю, всё с ними супер, делаю trim если со словами есть пробелы, но тут возникла ещё проблема, у меня добавляются пустые пробелы, если в них есть несколько пробелов от 2 и более, скажите как проверить, что запись не состоит из одник пробелов.... Спасибо большое |
motoroller, в моем варианте это как раз предусмотрено. Если, конечно, я верно понял.
|
Спасибо RIM, я просто сделал свой мне понятный уже... там всё работает, единственное проверку никак не могу поставить, если вместо слова куча пробелов, скажите как можно сделать такую проверку ..
|
String.prototype.trim = function(charList) { return this.replace(/^\s+|\s+$/g, ''); }; var str = 'jdhf ,,, dshfjk,,,,sah~!@#$%^dksa d<><><>gfhgdf sd'; var result = str.replace(/[^\-\wа-я]+/gi, ' ').trim().split(' '); alert(result.join('\r\n')); так? |
Ваш варинат хороший, но к сожалению он мне не подходит, так как у меня ключевые слова могут состоять из пар и даже трёх слов. А у вас разбивается всё по слову.
|
Ну так поправь регулярку ;) .
|
дык не селён я в них особо
|
Цитата:
А зачем это вообще? Поиск по сайту делаешь? |
Ну короче не поиск я делаю, а картинки к тегам, вообще кому надо:
сделал и всех найденных toLowerCase, и тут же стал показывать length=0 у пробелов :) |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <script src="/js/jquery.js" type="text/javascript"></script> <script type="text/javascript"> Array.prototype.unique = function () { var r = new Array(); o:for(var i = 0, n = this.length; i < n; i++) { for(var x = 0, y = r.length; x < y; x++) { if(r[x].toLowerCase()==this[i].toLowerCase()) continue o; } if(this[i].length!=0) r[r.length] = this[i]; } return r; } function trim (array) { charlist = ' \\s\\xA0'; var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g'); for (var i = 0; i < array.length; i++) array[i]=array[i].replace(re, ""); return array; } $(document).ready(function() { $("#button").click(function() { var newTags=$("#textfield").val().toLowerCase().split(/,|;/); if(newTags=='') return; newTags=trim(newTags); var existsTags=$("#tagsT").val().split(/,/); var tags= existsTags!="" ? existsTags.concat(newTags).unique().sort() : newTags.unique().sort(); $("#tagsT").val(tags); $("#tags").empty(); $("#textfield").val(""); for (var i = 0; i < tags.length; i++) { $comma= tags.length-1==i ? "" : ","; $("#tags").append($("<span>"+tags[i]+"<img src='/admin/i/delete.png' class='delTag' alt='Удалить тег' />"+$comma+" </span>")) } }); }); </script> </head> <body> <div id="tags"></div> <input type="text" name="tagsT" id="tagsT" value="" /> <p> <input type="text" name="textfield" id="textfield" value="" /> <input type="submit" name="button" id="button" value="Submit" /> </p> </body> </html> Если кому надо рабочий пример, может коряво написанный, но работает |
Может кто-нибудь подскажет рабочий пример, чтобы из строки перебирались значения разделяющиеся знаком, а потом подставлялись в другую ?
|
Здравствуйте!
Помогите, пожалуйста разобраться. Есть строка: nLA = "Subj_01&&Subj_02&&Subj_03" Пробую разобрать "сплитом": nArr = nLA.split("&&"); Ничего не выходит. При этом вот такая ф-ция еще вчера(!) работала :blink: function line2arr (str) { nArr = str.split ("&&"); alert(nArr.length); } // END line2arr |
alert('Subj_01&&Subj_02&&Subj_03'.split('&&').join('\n')) |
Дело в том, что я использую split "внутри" скрипта Greasmonkey, а там с одиночными кавычками проблема.
Я не могу понять, почему двойные кавычки перестали работать... |
alert("Subj_01&&Subj_02&&Subj_03".split("&&").join("\n")) И нет там никаких проблем с одиночными кавычками. |
Я разобрался.
Та функция, которая "вчера работала" - предназначена для обработки строк, получаемых из двух разных источников: из <textarea> и из DOM Storage. Так вот, "вчера" при обработке строки из <textarea> - все было ok, а когда я получал ту же строку из DOM Storage - ничего не происходило. Я решил попробовать передавать строки в функцию не непосредственно из DOM Storage, а через скрытое поле <input> - всё заработало. Что там происходило со строкой в DOM Storage я так и не знаю :no: |
Цитата:
|
Я выводил и в alert, и в <input type=text> - внешне никаких отличий.
Даже копировал строку из alert и "скармливал" ф-ции - она не "давилась". Это и сбивало с толку. |
Значит там не строка была. Надо пропустить через String() то, что приходит.
|
Спасибо, помогло!
|
Часовой пояс GMT +3, время: 11:04. |