2013-03-13 4 views
0

Может ли кто-нибудь объяснить, что делает это регулярное выражение?объяснение регулярных выражений в javascript

document.cookie.match(/cookieInfo=([^;]*).*$/)[1] 

Также было бы здорово, если бы я мог исключить двойные кавычки, которые я вижу в значениях cookieInfo. то есть когда cookieInfo = "xyz + asd" - я хочу разделить двойные кавычки, используя указанное выше регулярное выражение.

+0

Вы также можете сделать это сами: [Regex CheatSheat] (http://regexlib.com/CheatSheet.aspx) =) –

+1

'. * $' Бесполезен. –

+0

Это странно. , , '[1]' в конце указывает, что код хочет, чтобы второе совпадение возвращалось в массиве, но в конце шаблона Regex нет 'g', поэтому никогда не будет более одного совпадения (представленного' [0] ', а не' [1] '). , , – talemyn

ответ

0

он ищет строку document.cookie для cookieInfo=
Следующая она захватывает все символы, которые являются п. ot ; (пока он не достигнет первой точки с запятой).
[...] набор всех символов, входящих внутрь.
[^...] набор всех символов, которые не соответствуют

Затем он позволяет просматривать регистр через все остальные символы.
.* любой знак, 0 и больше.
$ конец строки (или в некоторых особых случаях, конец строки).

Вы можете заменить " несколько различных способов, но вместо того, начинка его в регулярное выражение, я бы рекомендовал делать заменить на нем после факта:

var string = document.cookie.match(...)[1], 
    cleaned_string = string.replace(/^"|"$/g, ""); 

Это второе регулярное выражение говорит: «смотреть на начало строки и посмотрите, есть ли " или посмотрите на конец строки и посмотрите, есть ли ".
Обычно RegEx останавливается после того, как он первым обнаружил, что он нашел. g в конце означает чтобы продолжать идти на каждый матч, который он может найти в строке, которую вы ему дали.

Я бы не поместил его в оригинальное RegEx, потому что игра с дополнительными кавычками может быть уродливой.
Если они гарантированы всегда, всегда быть там, тогда это здорово, но если вы предполагаете, что они есть, и вы нажмете тот, у которого их нет, то вы получите null.

0

Регулярное выражение соответствует строке, начинающейся с 'cookieInfo =', за которой следует и фиксирует 0 или более символов без столбца, за которыми следуют 0 или более «anythings».

Чтобы вырезать двойные кавычки можно использовать регулярное выражение/"/ и заменить его с пустой строкой.

2

Это в основном говорит, захватить как много символов, которые не являются пол-колонами и которые следуют после строки" cookieInfo =»

Попробуйте устранить двойные кавычки:

document.cookie.match(/cookieInfo="([^;]*)".*$/)[1] 
+0

Будет ли это работать, даже если cookieInfo не имеет двойных кавычек? – neelmeg

+2

Я бы не стал рекомендовать это, если котировки не гарантированы в 100% случаев. Если их когда-либо не было, вы получите «нулевой» матч. Вы можете иметь дело с необязательной главной цитатой легко '/ cookieInfo =?? (...', но тогда вы можете получить оставшееся закрытие' '', что не подходит. Решение, которое адаптируется к необязательным финальным кавычкам, будет более уродливым и более запутанным для тех, кто не выполняет RegEx в обычном режиме. Мое предложение состоит в том, чтобы заменить их после факт. – Norguard