2013-09-13 4 views
6

В чем разница между этими регулярными выражениями сменные?Разница в регулярных выражениях между ((?: [^ "]) *) И ([^ "] *)

((?:[^\"])*) 


([^\"]*) 

фон на этот вопрос:

Редактор Javascript WYSIWYG (TinyMCE) не разобрать мой HTML код в Firefox (23.0.1 и 25.0a2), но работает в в Chrome.

Я нашел регулярное выражение обвинить:

attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g; 

, который я модифицированную, заменив

((?:[^\"])*) 

с

([^\"]*) 

и

((?:[^\'])*) 

с

([^\']*) 

результирующее регулярное выражение работает в обоих браузерах для моего теста

attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"([^\"]*)\")|(?:\'([^\']*)\')|([^>\s]+)))?/g 

может кто-то положил некоторый свет на это?

мои данные теста, который работает только с модифицированным регулярным выражением является большое изображение> 700 кб, как:

var testdata = '<img alt="" src="data:image/jpeg;base64,/9j/4AAQSkZJRgA...5PmDk4FOGOHy6S3JW120W1uCJ5M0PBa54edOFAc8ePX/2Q==">' 

делать что-то подобное испытание:

testdata.match(attrRegExp); 

особенно когда данные контроля большой, немодифицированное регулярное выражение, скорее всего, терпит неудачу в firefox.

Вы не можете найти jsfiddle example here:

+0

Nice наблюдения. Может быть, ошибка Firefox/Gecko? –

+0

@ Cybȫʁgϟ37: Это не поможет OP вообще, так как он не виноват в коде TinyMCE (я полагаю) –

+0

@NiklasB. - Ах, теперь я понимаю. – JDB

ответ

5

Там должно быть никакой разницы в результате. Так что все должно быть хорошо.

Тем не менее, может быть большая разница в том, как РегВыр двигатели будут обрабатывать эти два выражения, а в случае Firefox/Safari вы только что доказали, есть на самом деле;)

Firefox использует WebKit/JavaScriptCore Yarr , Yarr накладывает произвольное, artificial limit, который попадает в не захватывая групповой вариант

// The below limit restricts the number of "recursive" match calls in order to 
// avoid spending exponential time on complex regular expressions. 
static const unsigned matchLimit = 1000000; 

В качестве такого Safari влияет также.

См. Соответствующие Webkit bug и соответствующие Firefox bug и nice test case, сравнивающие различные типы выражений кого-то вместе.

Смежные вопросы