2012-04-25 1 views
0

Я пытаюсь адаптировать библиотеку Haxe Markdown (http://code.google.com/p/mdown/) в официальный haxelib, который работает на разных платформах. Я сталкиваюсь с какой-то странностью, когда что-то работает на flash и javascript, но не neko.Несогласованность кросс-платформы в haxe Регулярные выражения

Смотрите этот пример кода:

var str = "<p>This is a blockquote</p>"; 
var out = ~/(^|\n)/g.replace(str, "$1 "); 
trace(out); 

на Javascript и флэш-я получаю это, как и ожидалось:

" <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 > " 

Я могу работать вокруг него пока (не используйте регулярные выражения) - но может ли кто-нибудь показать мне, в какой момент это нарушение?

Спасибо, Джейсон

P.S. Это может помочь ответить на вопросы: http://haxe.org/doc/cross/regexp#implementation-details

+0

Возможно ли, что текст Neko просто закодирован в двухбайтовой кодировке (например, UTF-16)? –

ответ

2

Если вы используете флаг m, чтобы преобразовать его в многострочное регулярное выражение, вы можете оставить его без изменений. Это может помочь.

Соответствующая часть документации находится в самом начале связанной страницы:

м: многострочного согласование,^и $ представляют собой начало и конец строки

А почему ваша проблема возникает, похоже, что библиотека регулярных выражений Neko ошибочно упрощает ваше регулярное выражение до пустого, которое будет совпадать между каждым charater. Вы можете положить a. в конце регулярного выражения и переместите пространство перед вашей заменой, что может помешать этой ошибке, и должно быть совместимо со всеми реализациями.

+0

Спасибо, это было то, что мне нужно. Теперь, используя это, и он работает: 'var out = ~ /(^.*)/ gm.replace (str," $ 1 ");' Я буду экспериментировать больше и посмотреть, стоит ли заполнять отчет об ошибке. –

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

  • Нет связанных вопросов^_^