Какое регулярное выражение (используемое в скрипте действий) для поиска первой новой строки (\n) в тексте?

Какое регулярное выражение используется для поиска первой новой строки (\n) в тексте (используется для поиска и удаления новой строки)? Я использую регулярное выражение в ActionScript и пробовал

ta.text = ta.text.replace(/\n*/,'') 

но это не работает

Спасибо


person Steven    schedule 09.07.2010    source источник


Ответы (2)


Только что проверил это, и это сработало для меня:

ta.text = ta.text.replace("\n",'');


Мой фактический код был (вырезан и вставлен):

var testString:String = "Hello\nWorld";
trace(testString);
testString = testString.replace("\n", '');
trace(testString);

Что дало результат:

Hello
World
HelloWorld


В качестве альтернативы вы можете определить шаблон в соответствии с тем, что вы пытались сделать:

var pattern:RegExp = /AB\*C/;

И это тоже работает. Модифицированный код станет:

var pattern:RegExp = /\n/;
var testString:String = "Hello\nWorld";
trace(testString);
testString = testString.replace(pattern, '');
trace(testString);

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

Я надеюсь, что это поможет в некотором роде,

--gMale

РЕДАКТИРОВАТЬ: учитывая обсуждение комментариев ниже, попробуйте вместо этого работать с одним из этих событий:

  • change Отправляется, когда текст в Элемент управления TextArea изменяется посредством пользовательского ввода.
  • dataChange Отправляется, когда свойство данных изменения.
  • textInput Отправляется, когда пользователь вводит , удаляет или вставляет текст в элемент управления.
person gMale    schedule 09.07.2010
comment
Спасибо, код определенно работает для строки. Но после некоторого тестирования я обнаружил, что это не работает для textArea в flex, и это моя проблема. Другие шаблоны будут работать, но не для новой строки. Тот же код, за исключением testTextArea.text.replace вместо testString.replace. Кто-нибудь знает, почему? - person Steven; 09.07.2010
comment
@Steven: Это странно ... вы переназначаете результат обратно в testTextArea.text? - person Cameron; 09.07.2010
comment
@Steven: в Windows TextArea.text будет иметь разрывы строк CRLF. Строка кода в конце моего ответа должна работать независимо от стиля разрыва строки. - person Jan Goyvaerts; 10.07.2010
comment
попробуйте \r вместо \n и посмотрите, что получится. Если это работает, вы можете сделать более сложное регулярное выражение, которое будет работать на любой платформе. - person gMale; 10.07.2010
comment
Спасибо всем, я думаю, что я точно определил проблему, и это не имеет отношения к reg exp. Я использую flex 3.5 и вызывал функцию замены в событии updateComplete для textArea. Если я отслеживаю текст в текстовой области, он отображает текст правильно, и другие вызовы поиска/замены работают нормально, но не для новой строки (поиск/замена не обнаружит никаких новых строк в текстовой области). Я думаю, что это как-то связано с updateComplete и внутренней работой flex, но не уверен, что именно. - person Steven; 10.07.2010
comment
@Steven: Позвольте мне понять, что вы говорите ... работает ли поиск / замена для новых строк, которые не находятся в текстовой области? Если это так, то я согласен, что это, похоже, указывает на проблему обработки событий. Есть ли причина, по которой вы используете FlexEvent.UPDATE_COMPLETE? Вместо этого вы можете работать с одним из событий TextArea, например change, dataChange или textInput. Я обновлю свой ответ ссылками. - person gMale; 11.07.2010
comment
Я имел в виду, что функция поиска/замены работает для других типов поиска, таких как базовый поиск коровы, но не работает для новой строки (то есть в update_complete). Я нашел обходной путь, чтобы не использовать событие update_complete. Спасибо - person Steven; 17.07.2010

Вы используете регулярное выражение \n*, которое соответствует первому вхождению нуля (!) или более символов перевода строки. Таким образом, первое совпадение этого регулярного выражения всегда находится в самом начале строки. Если строка начинается с символов перевода строки, они будут сопоставлены. Если строка начинается с чего-то другого, будет сопоставлена ​​строка нулевой длины в начале регулярного выражения.

Используйте \n для соответствия первому символу перевода строки. Используйте \n+ для соответствия первой последовательности символов перевода строки. Используйте [\r\n]+ для соответствия первой последовательности разрывов строк, независимо от используемого стиля разрыва строки (только LF, CRLF и т. д.). Используйте \r?\n для соответствия одиночному разрыву строки либо только LF, либо CRLF.

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

ta.text = ta.text.replace(/[\r\n]+/,'');
person Jan Goyvaerts    schedule 10.07.2010