var matches = [];
input_content.replace(/[^<]*(<a href="([^"]+)">([^<]+)<\/a>)/g, function () {
matches.push(Array.prototype.slice.call(arguments, 1, 4))
});
Это предполагает, что ваши якоря всегда будут иметь вид <a href="...">...</a>
, т.е. он не будет работать, если есть какие-либо другие атрибуты (например, target
). Регулярное выражение может быть улучшено, чтобы приспособиться к этому.
Чтобы разбить регулярное выражение:
/ -> start regular expression
[^<]* -> skip all characters until the first <
( -> start capturing first token
<a href=" -> capture first bit of anchor
( -> start capturing second token
[^"]+ -> capture all characters until a "
) -> end capturing second token
"> -> capture more of the anchor
( -> start capturing third token
[^<]+ -> capture all characters until a <
) -> end capturing third token
<\/a> -> capture last bit of anchor
) -> end capturing first token
/g -> end regular expression, add global flag to match all anchors in string
Каждый вызов нашей анонимной функции получит три токена в качестве второго, третьего и четвертого аргументов, а именно аргументы [1], аргументы [2], аргументы [3]:
- arguments [1] - это полный якорь
- arguments [2] - это часть href
- arguments [3] - текст внутри
Мы будем использовать хак для вставки этих трех аргументов в качестве нового массива в наш основной matches
массив. Встроенная переменная arguments
не является истинным массивом JavaScript, поэтому нам потребуется применить к нему метод split
Array, чтобы извлечь нужные элементы:
Array.prototype.slice.call(arguments, 1, 4)
Это извлечет элементы из arguments
, начиная с индекса 1 и заканчивая (не включительно) индексом 4.
var input_content = "blah \
<a href=\"http://yahoo.com\">Yahoo</a> \
blah \
<a href=\"http://google.com\">Google</a> \
blah";
var matches = [];
input_content.replace(/[^<]*(<a href="([^"]+)">([^<]+)<\/a>)/g, function () {
matches.push(Array.prototype.slice.call(arguments, 1, 4));
});
alert(matches.join("\n"));
Дает:
<a href="http://yahoo.com">Yahoo</a>,http://yahoo.com,Yahoo
<a href="http://google.com">Google</a>,http://google.com,Google