Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удалить все строки не содержащие ключевой символ (https://javascript.ru/forum/misc/71865-udalit-vse-stroki-ne-soderzhashhie-klyuchevojj-simvol.html)

rsaburov 18.12.2017 19:32

Удалить все строки не содержащие ключевой символ
 
Есть работающий скрипт для поиска и замены строк.
Однако при использовании регулярного выражения
^[^@]+\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
Та же ситуация с регулярным выражением
^(?!.*@).*$
для тех же целей
Оба выражения можно переориентировать с поиска строк не содержащих собаку на то же самое с решеткой, долларом и др.спецсимволами.
Как заставить их заработать и в чем причина?

Aetae 18.12.2017 19:52

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

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

rsaburov 19.12.2017 00:05

Спасибо, выражение реально помогло. Да, задача реальная, регулярок не знаю, но ничего не поделаешь - 3500 файлов, их же не будешь перебирать руками.
А вот у меня еще одна такая же проблема с
.*@.*\r\n
Оно удаляет строки содержащие @ в редакторах, но в JS работать не желает.
Стараюсь предохраняться, контролирую количество замен добавляя и меняя такие маркеры, смотрю что упущено и т.п.

Aetae 19.12.2017 00:44

Должно работать, возможно: /.*@.*\r?\n/g, потому как переносы строк только в винде \r\n в линуксе же просто \n, а редакторы по умолчанию рандомны.

rsaburov 19.12.2017 01:36

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


Часовой пояс GMT +3, время: 12:51.