Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2017, 19:32
Интересующийся
Отправить личное сообщение для rsaburov Посмотреть профиль Найти все сообщения от rsaburov
 
Регистрация: 06.01.2014
Сообщений: 24

Удалить все строки не содержащие ключевой символ
Есть работающий скрипт для поиска и замены строк.
Однако при использовании регулярного выражения
^[^@]+\n
выявляющего строки не содержащие символ @
этот скрипт перестает работать в форме *.js и непредсказуемо работает внутри html
var fso = new ActiveXObject("Scripting.FileSystemObject");
  var list = fso.OpenTextFile("D:\\list.txt", 1, true);           
  var rest = /^[^@]+\n/g;
  while (!list.AtEndOfStream) {
    var file = list.ReadLine();
    var myInputTextStream = fso.OpenTextFile(file, 1, true);
    var myOutputTextStream = fso.OpenTextFile(
      file.slice(0,-4) + "0.txt"
    , 2, true);
    myOutputTextStream.Write(
      myInputTextStream
        .ReadAll()
        .replace(rest, "")
    )
    myInputTextStream.Close();
    myOutputTextStream.Close();
  }
  list.Close();

Здесь list.txt содержит список обрабатываемых файлов.
При этом регулярка работает в Notepad++ и в EmEditor
Та же ситуация с регулярным выражением
^(?!.*@).*$
для тех же целей
Оба выражения можно переориентировать с поиска строк не содержащих собаку на то же самое с решеткой, долларом и др.спецсимволами.
Как заставить их заработать и в чем причина?
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2017, 19:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,517

/^[^@]+\n/g - значит искать все символы не равные @ от начала всего текста до самой последней \n, подходящей под условия.(т.к. \n тоже не равен @)
Работать оно естественно не буде.
Тут надо что-то типа /^[^@]+?$/gm.

Вообще если это реальные, а не учебные задачи, то не надо не зная регулярок их использовать, станет только хуже.
В данном случае вам проще было бы использовать вместо ReadAll - ReadLine в цикле и проверку наличия символа через простой indexOf.
__________________
29375, 35

Последний раз редактировалось Aetae, 18.12.2017 в 19:56.
Ответить с цитированием
  #3 (permalink)  
Старый 19.12.2017, 00:05
Интересующийся
Отправить личное сообщение для rsaburov Посмотреть профиль Найти все сообщения от rsaburov
 
Регистрация: 06.01.2014
Сообщений: 24

Спасибо, выражение реально помогло. Да, задача реальная, регулярок не знаю, но ничего не поделаешь - 3500 файлов, их же не будешь перебирать руками.
А вот у меня еще одна такая же проблема с
.*@.*\r\n
Оно удаляет строки содержащие @ в редакторах, но в JS работать не желает.
Стараюсь предохраняться, контролирую количество замен добавляя и меняя такие маркеры, смотрю что упущено и т.п.
Ответить с цитированием
  #4 (permalink)  
Старый 19.12.2017, 00:44
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,517

Должно работать, возможно: /.*@.*\r?\n/g, потому как переносы строк только в винде \r\n в линуксе же просто \n, а редакторы по умолчанию рандомны.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 19.12.2017, 01:36
Интересующийся
Отправить личное сообщение для rsaburov Посмотреть профиль Найти все сообщения от rsaburov
 
Регистрация: 06.01.2014
Сообщений: 24

Блестяще! Все сработало.
Спасибо огромнейшее!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предполагается наличие ';' в IE7- FINoM (X)HTML/CSS 5 25.08.2012 16:05
КАК удалить []-символы из строки?! Brook Events/DOM/Window 4 25.04.2012 16:38
Название ячейки таблицы Questioner Общие вопросы Javascript 6 16.02.2011 09:58
робота с <textarea>, все строки сливаются в одну когда виводжу из БД Max_2109 Общие вопросы Javascript 6 16.03.2010 03:18
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37