Межплатформенная несогласованность в регулярных выражениях haxe
Я пытаюсь адаптировать библиотеку Haxe Markdown ( http://code.google.com/p/mdown/) в официальный haxelib, который работает на разных платформах. Я сталкиваюсь с какой-то странностью, когда что-то работает на flash и javascript, но не на neko.
Посмотрите этот пример кода:
var str = "<p>This is a blockquote</p>";
var out = ~/(^|\n)/g.replace(str, "$1 ");
trace(out);
На Javascript и Flash я получаю это, как и ожидалось:
" <p>This is a blockquote</p>"
На Неко я получаю это:
" < p > T h i s i s a b l o c k q u o t e < / p > "
Сейчас я могу обойти это (не используя регулярные выражения) - но кто-нибудь может показать мне, в какой момент это нарушение?
Спасибо Джейсон
ps Это может помочь ответить на вопрос: http://haxe.org/doc/cross/regexp
1 ответ
Если вы используете m
флаг, чтобы преобразовать его в многострочное регулярное выражение, вы можете пропустить часть новой строки. Это может помочь.
Соответствующая часть документации находится в начале связанной страницы:
m: многострочное соответствие, ^ и $ представляют начало и конец строки
Что касается причины возникновения вашей проблемы, может показаться, что библиотека регулярных выражений Neko неправильно упрощает ваше регулярное выражение до пустого, что будет соответствовать каждому характеру. Вы могли бы положить. в конце регулярного выражения и переместите пробел в начало строки замены, что может предотвратить возникновение этой ошибки, и это должно быть совместимо со всеми реализациями.