Попытка сделать регулярное выражение JSLint совместимым - PullRequest
1 голос
/ 26 сентября 2011

Я пытаюсь сделать это регулярное выражение:

var url_pattern = /(\()((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\))|(\[)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\])|(\{)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\s'"\]])\s*['"]?|[^=\s]\s+)(\b(?:ht|f)tps?:\/\/[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]|$))&[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]*)*[a-z0-9\-_~$()*+=\/#[\]@%])/img;

JSLint-совместимым.Это жалуется на использование.и не убегая [and].

(Источник: http://jmrware.com/articles/2010/linkifyurl/linkify.html)

edit: Не такая уж большая проблема, я все равно сделал это в бэкэнде. Мне все равно нужна версия(так как я создаю движок рендеринга, но это уже не супер срочно).

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Вот версия с экранированными [ символами: var url_pattern = /(\()((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#\[\]@%]+)(\))|(\[)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#\[\]@%]+)(\])|(\{)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#\[\]@%]+)(\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#\[\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\s'"\]])\s*['"]?|[^=\s]\s+)(\b(?:ht|f)tps?:\/\/[a-z0-9\-._~!$'()*+,;=:\/?#\[\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\-._~!$&'()*+,;=:\/?#\[\]@%]|$))&[a-z0-9\-._~!$'()*+,;=:\/?#\[\]@%]*)*[a-z0-9\-_~$()*+=\/#\[\]@%])/img;

Он по-прежнему жалуется на «небезопасный ^», который трудно исправить, потому что он по сути подразумевает, что вы должны выписать все символы, которым хотите соответствовать, вместо перечисления тех, которые вам не нужны хочу соответствовать. Что, конечно, побеждает цель ^. Так что вы можете игнорировать это предупреждение.

0 голосов
/ 26 сентября 2011

Заменить:

var url_pattern = /(\()((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\))|(\[)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\])|(\{)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\s'"\]])\s*['"]?|[^=\s]\s+)(\b(?:ht|f)tps?:\/\/[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]|$))&[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]*)*[a-z0-9\-_~$()*+=\/#[\]@%])/img;

с

var url_pattern = new RegExp("([\\.+])", "img"); // simplified for my sanity

При правильном экранировании строки \ до \\

<Ч />

EDIT:

var a = new RegExp("(\\()((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(\\))|(\\[)((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(\\])|(\\{)((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(\\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\\s'\"\\]])\\s*['\"]?|[^=\\s]\\s+)(\\b(?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$'()*+,;=:\\/?#[\\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]|$))&[a-z0-9\\-._~!$'()*+,;=:\\/?#[\\]@%]*)*[a-z0-9\\-_~$()*+=\\/#[\\]@%])", "gim");

Вышеуказанный пропуск jslint

...