У меня есть якорный текст, который я хочу разделить и преобразовать в элементы списка (маркеры)
Здесь я использую jquery для получения текста конкретных якорей:
var productDetails = $('.product-info .product-name').find('a');
console.info(productDetails.text());
что приводит к этому списку:
Whiteboard 80x110 cm - Magnetisch
Whiteboard 60x90 cm - Magnetisch
Whiteboard 60x90 cm - Magnetisch / Emaille
Whiteboard 90x120 cm - Magnetisch / Emaille
Skin Whiteboard 75x115 cm - Wit
Skin Whiteboard 75x115 cm PRO - Polyester coating
Frameless whiteboard - Rechte hoeken - 58x88 cm
Frameless whiteboard - Rechte hoeken - 78x108 cm
Frameless whiteboard - Rechte hoeken - 88x118 cm
Frameless whiteboard - Rechte hoeken - 88x178 cm
Как я могу разделить их на следующие:
Надеюсь, кто-нибудь сможет мне помочь, потому что я действительно не знаю, как разделить струну. Логичнее всего разбить его по первому номеру и тире -.
Я попытался разбить его вот так:
console.info(productDetails.split("-"), productDetails.match(/\d+/g).map(Number));
что приводит к массиву текста с разделенным последним словом следующим образом:
0:" Whiteboard 80x110 cm "
1:" Magnetisch Whiteboard 60x90 cm "
и массив со всеми числами, разделенными следующим образом:
0:80
1:110
Но как мне сделать красивое разделение, чтобы мне не приходилось объединять этот вывод.
Может быть, вы не знаете, как это сделать, но вам нужно что-то попробовать. Покажите нам свою попытку. Попробуйте что-нибудь с String.split ().
Вы можете разделить с помощью регулярного выражения. Но поскольку у вас непоследовательный результат, трудно добиться
@madalinivascu это невозможно, потому что это тест AB, который я делаю с помощью диспетчера тегов Google.
Кто-нибудь знает решение?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


var main_array=[];
$('.product-info .product-name a').each(function(){
var array=$(this).text().split(" ");
main_array.push(array);
});
console.info(main_array);
main_array будет иметь строку, используйте синтаксис индекса для доступа к требуемой строке.
Это никак не помогает. Прочтите еще раз и сравните, что хочет OP и что делает ваш фрагмент.
вывод не согласован. его трудно достичь
Да, мы это знаем. Об этом уже говорилось в сообщении OP, но то, что вы опубликовали, не является решением проблемы OP. Вы просто показываете, как разделить струну.
возможно ли иметь какой-либо разделитель в теге 'a', чтобы мы могли разделить его с помощью разделителя, например, "|".
@KaleemNalband, что вы имеете в виду, я не могу редактировать строку, это то, что я получил с веб-сайта. Мы можем отредактировать это потом
@KaleemNalband вы знаете какое-нибудь решение?
@KaleemNalband ознакомьтесь с моим решением
@onyx отлично смотрится!
Вы можете добиться этого с помощью regular expression и струны split. Поскольку ваши данные несовместимы, нет простого способа сделать это. Один из подходов, например,
1. Split the output on the dimension, i.e. `58x88 cm`
2. Remove all white spaces and dashes
3. Concat the result
Вот пример кода
var input = [
'Whiteboard 80x110 cm - Magnetisch',
'Whiteboard 60x90 cm - Magnetisch',
'Whiteboard 60x90 cm - Magnetisch / Emaille',
'Whiteboard 90x120 cm - Magnetisch / Emaille',
'Skin Whiteboard 75x115 cm - Wit',
'Skin Whiteboard 75x115 cm PRO - Polyester coating',
'Frameless whiteboard - Rechte hoeken - 58x88 cm',
'Frameless whiteboard - Rechte hoeken - 78x108 cm',
'Frameless whiteboard - Rechte hoeken - 88x118 cm',
'Frameless whiteboard - Rechte hoeken - 88x178 cm',
];
function trimCharacters(s) {
return s.replace(/^(\s|-)+|(\s|-)+$/g, '')
}
function bulletList(text) {
if (!text) {
return;
}
var items = text.split(/(\d+x\d+ cm)/).filter(Boolean).map(x => trimCharacters(x));
if (items.length === 3) {
return items;
}
var res = items[0].split('-').map(item => trimCharacters(item));
return [res[0], items[1], res[1]];
}
input.forEach(text => {
var data = bulletList(text);
var list = $('<ul></ul>');
data.forEach(item => {
list.append(`<li>${item}</li>`);
});
$('.data-list').append(list);
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "data-list"></div>ПРИМЕЧАНИЕ: поскольку ваши данные несовместимы, этот код работает только для предоставленного шаблона.
Также этот код написан на Ecmascript, поэтому вы, вероятно, захотите использовать транспилировать в обычном javascript для совместимости.
ваше соглашение об именах непоследовательно, поэтому я не думаю, что это возможно, лучше, если вы сделаете это на стороне сервера