Разбор строки
Добрый вечер, есть такой вопросик, хочу сделать теги для картинок,
видел на яндексе клёво сделано, вводишь в строку слова ( по видимому сепаратор запятая ии точка с запятой) и он разбирает строку, если надо удаляет дубликаты и выводит в другуб строку, подскажите как реализовать ? Заранее спасибо |
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, время: 12:13. |