Скажите, что у Вас есть строка: "Корова ABC перепрыгнула через XYZ луна", и Вы хотите использовать jQuery для получения подстроки между "ABC" и "XYZ", как Вы сделали бы это? Подстрока должна быть "коровой, через которую перепрыгивают".Большое спасибо!
Просто чтобы показать вам, как использовать 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. Надеюсь, это устраняет путаницу.
Это не имеет ничего общего с 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
заменит в скобках подсовпадения из вашего обычного выражения - часть (. *)
сверху. Таким образом, возвращаемое значение представляет собой замену всей строки частями между разделителями.
Возможно, вам не понадобится использовать 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(). По моему опыту, такие функции работают одинаково во всех браузерах.
Meagar, ваше объяснение великолепно и ясно объясняет, кто это работает.
Только несколько незначительных вопросов:
Скобки () нужны ТОЛЬКО как способ обозначения подмножества во втором параметре функции relpace или это также будет обозначать подмножества: /^.*ABC. XYZ. $/, но не будет работать для того, что мы пытаемся сделать в данном случае?
Имеет ли это регулярное выражение 7 подматчей:
^
.*
ABC
.*
XYZ
.*
$
Thanks,
Steve