Как заменить простые URL ссылками?

Вот простой пример, который я разработал на основе http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages

Обратите внимание, что в отличие от их таблицы, я не вычисляю SMA, и я не жду, чтобы создать EMA после 10 выборок. Это означает, что мои значения немного отличаются друг от друга, но если вы его нарисуете, то это будет точно после 10 образцов. Во время первых 10 выборок EMA, которые я вычисляю, соответствующим образом сглаживается.

def emaWeight(numSamples):
    return 2 / float(numSamples + 1)

def ema(close, prevEma, numSamples):
    return ((close-prevEma) * emaWeight(numSamples) ) + prevEma

samples = [
22.27, 22.19, 22.08, 22.17, 22.18, 22.13, 22.23, 22.43, 22.24, 22.29,
22.15, 22.39, 22.38, 22.61, 23.36, 24.05, 23.75, 23.83, 23.95, 23.63,
23.82, 23.87, 23.65, 23.19, 23.10, 23.33, 22.68, 23.10, 22.40, 22.17,
]
emaCap = 10
e=samples[0]
for s in range(len(samples)):
    numSamples = emaCap if s > emaCap else s
    e =  ema(samples[s], e, numSamples)
    print e

426
задан Peter Mortensen 13 August 2011 в 19:25
поделиться

5 ответов

Замена URL со ссылками (Отвечают на Общую проблему)

регулярное выражение в вопросе промахи много из пограничных случаев. При обнаружении URL всегда лучше пользоваться специализированной библиотекой, которая обрабатывает международные доменные имена, новый TLDs как .museum, круглые скобки и другая пунктуация в и в конце URL и многих других пограничных случаев. Посмотрите сообщение в блоге Jeff Atwood проблема С URL для объяснения некоторых из других проблем.

лучшая сводка библиотек соответствия URL находится в [1 117] , Ответ Dan Dascalescu +100
(по состоянию на февраль 2014)

<час>

"Заставляет регулярное выражение заменить больше чем одно соответствие" (Ответьте на определенную проблему)

Добавляют "g" до конца регулярного выражения для включения глобального соответствия:

/ig;

, Но который только решает проблему в вопросе, где регулярное выражение только заменяло первое соответствие. не используют тот код.

284
ответ дан Community 13 August 2011 в 19:25
поделиться

Мне пришлось сделать обратное, и сделать HTML-ссылки просто URL-адресом, но я изменил ваше регулярное выражение, и это работает как шарм, спасибо :)

var exp = /<a\s.*href=['"](\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])['"].*>.*<\/a>/ig;

source = source.replace(exp,"$1");
0
ответ дан 22 November 2019 в 23:16
поделиться

Спасибо, это было очень полезно. Я также хотел что-то, что будет связывать вещи, которые выглядели как URL-адрес - как основное требование, это связало что-то вроде www.yahoo.com, даже если http: // Protocol Prefix отсутствует. Так что в основном, если «www». Присутствует, это свяжет это и предполагает, что это http: //. Я также хотел электронные письма, чтобы превратиться в Mailto: ссылки. Пример: www.yahoo.com будет преобразован в www.yahoo.com

Вот код, который я закончил (комбинация кода с этой страницы и других вещей, которые я нашел в Интернете, и другие вещи, которые я сам сделал):

function Linkify(inputText) {
    //URLs starting with http://, https://, or ftp://
    var replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
    var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');

    //URLs starting with www. (without // before it, or it'd re-link the ones done above)
    var replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
    var replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');

    //Change email addresses to mailto:: links
    var replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
    var replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');

    return replacedText
}

В 2-м замене (^ | [^]) часть заменяет только www.whatever.com, если он еще не префиксируется // - чтобы избежать двойного связывания, если URL уже был связан в первом заменять. Кроме того, возможно, что www.whatever.com может быть в начале строки, которая является первым «или» состоянием в этой части Regex.

Это может быть интегрировано как плагин jQuery, как jesse P, проиллюстрированное выше - но я специально хотел регулярной функции, которая не действовала на существующем элементе DOM, потому что я принимаю текст, и затем добавляю его в Дом, и я хочу, чтобы текст был «связывающим», прежде чем добавить его, поэтому я передаю текст через эту функцию. Работает отлично.

23
ответ дан 22 November 2019 в 23:16
поделиться

обычно можно изменить/переопределить обработчик исключений с разделением на ноль, если у вас есть доступ к подпрограммам обработчика исключений. в случае ARM разделение выполняется библиотечной подпрограммой. и существуют механизмы для информирования пользовательского кода, когда происходит деление на ноль.

см. http://infocenter.arm.com/help/index.jsp?topic =/com.arm.doc.faqs/ka4061.html

я бы предложил предоставить __rt_raise (), как сказано на странице выше.

_ rt _ raise (2,2) будет вызываться, когда подпрограмма деления обнаруживает деление на ноль. таким образом, можно распечатать регистр LR. а затем использовать addr2line для перекрестной ссылки на исходную линию

-121--3223149-

Посмотрите на

-121--3090677-

Обнаружение электронной почты в ответе Травитрона выше не сработало для меня, поэтому я расширил/заменил его следующим (код C #).

// Change e-mail addresses to mailto: links.
const RegexOptions o = RegexOptions.Multiline | RegexOptions.IgnoreCase;
const string pat3 = @"([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,6})";
const string rep3 = @"<a href=""mailto:$1@$2.$3"">$1@$2.$3</a>";
text = Regex.Replace(text, pat3, rep3, o);

Это позволяет использовать такие адреса электронной почты, как " firstname.secondname@one.two.three.co.uk ".

0
ответ дан 22 November 2019 в 23:16
поделиться

Лучший скрипт для этого: http://benalman.com/projects/javascript-linkify-process-lin/

7
ответ дан 22 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

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