Używam regex, aby znaleźć adresy URL w sznurku, a następnie zamieniaj je w prawdziwe linki HTML (w JavaScript). Problem z moją regresją jest to, że zawiera poprzedni znak przed HTTP. (Mówię o drugiej regex w pierwszej tablicy.)

str = "testhttp://example.com";

search = new Array(
    /\[url\](.*?)\[\/url\]/ig,
    /(?:[^\]\/">]|^)((https?):\/\/[-A-ZÅÄÖ0-9+&@#\/%?=~_|!:,.;]*[-A-ZÅÄÖ0-9+&@#\/%=~_|])/ig
);

replace = new Array(
    '<a href="//$1">$1</a>',
    '<a href="$1">$1</a>'
);

for (i = 0; i < search.length; i++) {
    str = str.replace(search[i], replace[i]);
}

Wynik staje się:

tes<a href="http://example.com">http://example.com</a>

Ale chcę, żeby to było:

test<a href="http://example.com">http://example.com</a>

Ważne jest, że Regex powinien znaleźć adresy URL, nawet jeśli są one najpierw w ciągu, ale nie należy ich znaleźć, jeśli poprzednia postać jest jednym z następujących trzech znaków: "/>

Jestem dość nowy, aby zregexować. Nadzieję, że zrozumiesz!

Dzięki!

1
user1043994 25 wrzesień 2012, 21:15

1 odpowiedź

Najlepsza odpowiedź

Problem jest że javascript zawsze zastąpi pełny Dopasuj, a nie grupa wychwytywania wewnętrzna.

Oto schludny (i testowany) sztuczka, aby złagodzić to. Utwórz pierwsze uchwycenie subpattern:

/([^\]\/">]|^)((https?):\/\/[-A-ZÅÄÖ0-9+&@#\/%?=~_|!:,.;]*[-A-ZÅÄÖ0-9+&@#\/%=~_|])/ig

A następnie włącz go wyraźnie:

'$1<a href="$2">$2</a>'
1
Community 23 maj 2017, 12:04