Регулярное выражение, разбивающее строку на слова - PullRequest
0 голосов
/ 08 марта 2012

У меня есть следующий текст:

    <span term="db6ff2ffe2df7b8cfc0d9542bdce27dc" class="yellowback">Lorem</span> <span term="e78f5438b48b39bcbdea61b73679449d" class="yellowback">ipsum</span> dolor sit amet,   consectetur adipiscing elit.
Ut ut mattis sapien.   Suspendisse at felis nisl.   Vestibulum nec risus leo,   in consectetur dolor.   Duis suscipit arcu quis nibh dapibus gravida.   Ut vel rhoncus neque.   Sed et dolor quis est sollicitudin vulputate.   Nam vehicula,   tortor at consectetur laoreet,   nulla erat ultrices dui,   vehicula varius odio sem sed ligula.
Vivamus porttitor odio sed ligula cursus non placerat dolor posuere.
Pellentesque vitae metus vel dolor lobortis feugiat.   Nunc faucibus commodo viverra.   Aliquam porta nisl eu turpis vulputate id laoreet odio lobortis.   Proin sit amet neque nibh,   eget tincidunt est.   Etiam accumsan erat at mauris lacinia porta.
Suspendisse auctor,   quam sit amet congue consequat,   dolor orci placerat diam,   sed ultricies diam ipsum nec tortor.   Vestibulum egestas ipsum ut leo fermentum imperdiet.   Mauris varius iaculis magna,   id luctus risus vestibulum vel.

Я хотел бы разбить его на слова, но если вы посмотрите внимательно, некоторые слова могут содержаться в некоторых тегах. Я хочу сделать следующее: если слово находится внутри тега, оно должно относиться к тегу в целом как к слову. Прямо сейчас у меня есть следующее регулярное выражение для выполнения этого:

(<span.+>|\w+|<\/span>)

Это работает, но если есть 2 дополнительных тега, он захватит их обоих и будет воспринимать их как слово, которое я бы не хотел.

Мне не нравится использовать Regex для этой вещи, но это кажется наиболее подходящим решением, учитывая тот факт, что оно должно быть в javascript, и нет никакого способа использовать стороннюю библиотеку. Однако я открыт для другого подхода, использующего какой-то алгоритм ... если нет, то Regex - это нормально.

Удовлетворительным результатом будет следующий

["<span term=\"db6ff2ffe2df7b8cfc0d9542bdce27dc\" class=\"yellow\">Lorem</span>", "<span term=\"e78f5438b48b39bcbdea61b73679449d\" class=\"yellow\">Ipsum</span>", "is", "simply", "dummy", "text", "of", "the", "printing", "and", "typesetting", "industry", ".
     ", "Lorem", "Ipsum", "has", "been", "the", "industry", " ' ", "s", "standard", "<span term=\"e78f5438b48b39bcbdea61b73679449d\" class=\"yellow\">Ipsum</span>", "text", "ever", "since", "the", "1500s", ",
     ", "when", "an", "unknown", "printer", "took", "a", "galley", "of", "type", "and", "scrambled", "it", "to", "make", "a", "type", "specimen", "book", ".
     ", "It", "has", "survived", "not", "only", "five", "centuries", ",  ", "but", "also", "the", "leap", "into", "electronic", "typesetting", ",
     ", "remaining", "essentially", "unchanged", ".  ", "It", "was", "<span term=\"e78f5438b48b39bcbdea61b73679449d\" class=\"yellow\">Ipsum</span>", "in", "the", "1960s", "with", "the", "release", "of", "Letraset", "sheets", "containing", "Lorem", "Ipsum", "passages", ",  ", "and", "more", "recently", "with", "desktop", "publishing", "software", "like", "Aldus", "PageMaker", "including", "versions", "of", "Lorem", "Ipsum", ".
"]

Не очень хорошим результатом будет следующее:

["<span term=\"db6ff2ffe2df7b8cfc0d9542bdce27dc\" class=\"yellow\">Lorem</span> <span term=\"e78f5438b48b39bcbdea61b73679449d\" class=\"yellow\">Ipsum</span>", "is", "simply", "dummy", "text", "of", "the", "printing", "and", "typesetting", "industry", ".
         ", "Lorem", "Ipsum", "has", "been", "the", "industry", " ' ", "s", "standard", "<span term=\"e78f5438b48b39bcbdea61b73679449d\" class=\"yellow\">Ipsum</span>", "text", "ever", "since", "the", "1500s", ",
         ", "when", "an", "unknown", "printer", "took", "a", "galley", "of", "type", "and", "scrambled", "it", "to", "make", "a", "type", "specimen", "book", ".
         ", "It", "has", "survived", "not", "only", "five", "centuries", ",  ", "but", "also", "the", "leap", "into", "electronic", "typesetting", ",
             ", "remaining", "essentially", "unchanged", ".  ", "It", "was", "<span term=\"e78f5438b48b39bcbdea61b73679449d\" class=\"yellow\">Ipsum</span>", "in", "the", "1960s", "with", "the", "release", "of", "Letraset", "sheets", "containing", "Lorem", "Ipsum", "passages", ",  ", "and", "more", "recently", "with", "desktop", "publishing", "software", "like", "Aldus", "PageMaker", "including", "versions", "of", "Lorem", "Ipsum", ".
    "]

Обратите внимание, как 2 пролета образуют 1 элемент массива во втором примере, а в первом - 2 разных элемента.

1 Ответ

0 голосов
/ 08 марта 2012

Как насчет:

str.split(/(<span[^>]*>[^<]+<\/span>|\w+)/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...