Javascript Regex обрезать до «пробел» И «тире» или совпадать - PullRequest
1 голос
/ 29 февраля 2012

Я задавал подобный вопрос раньше и получил правильный ответ. На этот раз я бы предпочел получить две переменные для имени после 'By' и 'Date' отдельно.

Проблема с приведенным ниже совпадением заключается в том, что он не обнаруживает, если в имени есть пробел или тире:

<p class="review-rating">
 By carolyn.fleetwood
 - Feb 11, 2012
 -
 Something.com
</p>
<p class="review-rating">
 By Dont-work
 - Feb 11, 2012
 -
 Something.com
</p>
<p class="review-rating">
 By wont work
 - Feb 11, 2012
 -
 Something.com
</p>

$('.review-rating').each(function() {
    var matches = $(this).text().match(/\s*By\s+([\w.]+)\s*-\s*([\w, ]+)/);
    alert("Date: " + matches[2] + " | By: " + matches[1]);
});​

С учетом вышесказанного он не будет поднимать тире или пробелы после "By".

Смотрите здесь jfiddle: http://jsfiddle.net/GYSbR/1/

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Ответ, вероятно, заключается в использовании точечного сопоставителя: он соответствует всему, кроме новых строк в случае по умолчанию.

.match(/\s*By\s+(.+)\s*-\s*([\w, ]+)/)

Единственное предостережение в том, что он может захватывать некоторые пробельные символы в поле «By»линия, если есть.Один из способов:

.match(/\s*By\s+(.*\S)\s*-\s*([\w, ]+)/)

Здесь .*\S примерно переводится как «соответствует одному или нескольким символам, которые заканчиваются не пробелами, без новых строк».

1 голос
/ 29 февраля 2012

Предполагая, что остальная часть строки является их именем, просто переключитесь с [\w.] на [^\r\n]+, чтобы он перехватывал остальную часть содержимого до следующей новой строки.

...