Используя jQuery для нахождения подстроки

Скажите, что у Вас есть строка: "Корова ABC перепрыгнула через XYZ луна", и Вы хотите использовать jQuery для получения подстроки между "ABC" и "XYZ", как Вы сделали бы это? Подстрока должна быть "коровой, через которую перепрыгивают".Большое спасибо!

5
задан Dayo 30 December 2011 в 10:40
поделиться

4 ответа

Просто чтобы показать вам, как использовать jQuery и регулярное выражение Meagar. Допустим, у вас есть HTML-страница со следующим тегом P :

<p id="grabthis">The ABC cow jumped over XYZ the moon</p>

Чтобы получить строку, вы должны использовать следующую смесь jQuery / JavaScript (звучит глупо, поскольку jQuery - это JavaScript, но смотрите jQuery как библиотеку DOM JavaScript):

$(document).ready(function() { // Wait until the document has been fully loaded
  var pStr=$("#grabthis").text(); // Grab the text from the P tag and put it into a JS variable
  var subStr=pStr.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); // Run the regex to grab the middle string

  alert(subStr); // Output the grabbed middle string
});

Или более короткую версию:

$(document).ready(function() {
  alert($("#grabthis").text().replace(/^.*ABC(.*)XYZ.*$/m, '$1'));
});

Функция замены - это функция JavaScript. Надеюсь, это устраняет путаницу.

0
ответ дан 13 December 2019 в 22:02
поделиться

Это не имеет ничего общего с jQuery, который в основном предназначен для обхода и управления DOM. Вам нужно простое регулярное выражение:

var str = "The ABC cow jumped over XYZ the moon";
var sub = str.replace(/^.*ABC(.*)XYZ.*$/m, '$1');

Идея состоит в том, что вы используете String.replace с регулярным выражением, которое соответствует вашим открывающим и закрывающим разделителям, и заменяете всю строку частью, совпадающей между разделители.

Первый аргумент - это регулярное выражение. Завершающий m заставляет его совпадать в нескольких строках, что означает, что ваш текст между ABC и XYZ может содержать символы новой строки. Остальное распределяется следующим образом:

  • ^ начинать с начала строки
  • . * последовательность из 0 или более символов
  • ABC ваш открывающий разделитель
  • ( . *) соответствует серии из 0 или более символов
  • XYZ ваш закрывающий разделитель
  • . * серия из 0 или более символов
  • $ соответствует до конца строки

Второй параметр, строка замены, - «$ 1». replace заменит в скобках подсовпадения из вашего обычного выражения - часть (. *) сверху. Таким образом, возвращаемое значение представляет собой замену всей строки частями между разделителями.

6
ответ дан 13 December 2019 в 22:02
поделиться

Возможно, вам не понадобится использовать jQuery в этом случае. Я бы сделал что-то вроде этого:

function between(str, left, right) {
    if( !str || !left || !right ) return null;
    var left_loc = str.indexOf(left);
    var right_loc = str.indexOf(right);
    if( left_loc == -1 || right_loc == -1 ) return null;
    return str.substring(left_loc + left.length, right_loc);
}

Нет гарантий, что приведенный выше код не содержит ошибок, но идея заключается в использовании стандартной функции substring(). По моему опыту, такие функции работают одинаково во всех браузерах.

3
ответ дан 13 December 2019 в 22:02
поделиться

Meagar, ваше объяснение великолепно и ясно объясняет, кто это работает.

Только несколько незначительных вопросов:

  • Скобки () нужны ТОЛЬКО как способ обозначения подмножества во втором параметре функции relpace или это также будет обозначать подмножества: /^.*ABC. XYZ. $/, но не будет работать для того, что мы пытаемся сделать в данном случае?

  • Имеет ли это регулярное выражение 7 подматчей:

^
.*
ABC
.*
XYZ
.*
$

  • Означает ли $1 использование первой подстановки в скобках? Сначала я подумал, что это может означать использование второй подстановки в серии (первая - $0).

Thanks,

Steve

1
ответ дан 13 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: