AS3 RegExp вопрос - PullRequest
       1

AS3 RegExp вопрос

2 голосов
/ 26 марта 2011

Я только что написал приложение Flex, которое обрабатывает текстовое содержимое Википедии в виде строк. Я пытаюсь использовать RegExp, чтобы очистить всю разметку Википедии. Вот пример:

Мне бы хотелось:

var pageText:String = new String("was an [[People of the United States|American]] [[film director]], writer, [[Film producer|producer]], and [[photographer]] who lived in England during most of the last four decades of his career. Kubrick was noted for the scrupulous care with which he chose his subjects, his slow method of working, the variety of genres he worked in, his technical perfectionism, and his reclusiveness about his films and personal life. He maintained almost complete artistic control, making movies according to his own whims and time constraints, but with the rare advantage of big-[[Movie studio|studio]] [[financial support]] for all his endeavors.");

чтобы выглядеть так:

var pageText:String = new String("was an American film director, writer, producer, and photographer who lived in England during most of the last four decades of his career. Kubrick was noted for the scrupulous care with which he chose his subjects, his slow method of working, the variety of genres he worked in, his technical perfectionism, and his reclusiveness about his films and personal life. He maintained almost complete artistic control, making movies according to his own whims and time constraints, but with the rare advantage of big-studio financial support for all his endeavors.");

Так что мне нужно написать RegExp, который [[Удалить эту часть | но оставь это]].

Я проверил эти среди других:

           var pattern:RegExp = new RegExp(/\[\[(.+)\|/);
           var pattern2:RegExp = new regExp(/^\[\[\|/);
           var pattern3:RegExp = new RegExp(/^\[\[[A-Z].*\|$/);

           var pageTextCleaned:String = pageText.replace(pattern, " ");

Тогда было бы легко просто удалить оставшиеся [[и]]

Я не использую этот материал для RegExp, поэтому любая помощь будет отличной!

Спасибо!

Ответы [ 3 ]

4 голосов
/ 26 марта 2011

Вы используете конструктор RegExp, который принимает строку в качестве аргумента, но передает ей RegExp. Я не думаю, что это работает, как вы хотите.
Посмотрите, работает ли он с лексическим RegExp:

var pageTextCleaned:String = pageText.replace(/\[\[([^\]]*\|)?([^\]]+)]]/g, "$2");

Это не надежно, если у вас есть ] с или несколько | с внутри [[...]] с, но это начало.

0 голосов
/ 26 марта 2011

Так как я не уверен, что максимальное количество записей> 2, вот решение, которое проходит через цикл, заменяя каждую запись, заканчивающуюся на «|»с помощью «[[» до тех пор, пока ничего не останется, затем удаляет «[[» и «]]».Если всегда есть только два, вы можете немного упростить его, чтобы ускорить:,

0 голосов
/ 26 марта 2011

Я не знаю об AS3, но вот код JavaScript для достижения этого, который должен быть похожим:

s = s.replace(/\[\[(?:([^\]|]*)|[^\]|]*\|([^\]]*))\]\]/g, '$1$2');

Регулярное выражение довольно запутанно. Вот разбивка его частей:

  • \[\[ - две открывающиеся квадратные скобки.
  • (?: | ) - группа без захвата с двумя вариантами:

    • ([^\]|]*) - содержимое с не содержит символ канала, захватывает весь контент в первую группу, $1.
    • OR
    • [^\]|]*\|([^\]]*) - ссылка с символом трубы:
      • [^\]|]* - некоторые символы, которые не ] или |.
      • \| - буквенный знак трубы.
      • ([^\]]*) - еще несколько не ] символов, захват во вторую группу, $2.
  • \[\[ - две закрывающие квадратные скобки.

Затем мы заменяем каждый захват на $1$2 - один из них всегда пуст, а другой - строка, которую мы хотим сохранить.

Рабочий пример: http://jsbin.com/adedu4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...