Удалить все строки не содержащие ключевой символ
Есть работающий скрипт для поиска и замены строк.
Однако при использовании регулярного выражения ^[^@]+\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 Та же ситуация с регулярным выражением ^(?!.*@).*$ для тех же целей Оба выражения можно переориентировать с поиска строк не содержащих собаку на то же самое с решеткой, долларом и др.спецсимволами. Как заставить их заработать и в чем причина? |
/^[^@]+\n/g - значит искать все символы не равные @ от начала всего текста до самой последней \n, подходящей под условия.(т.к. \n тоже не равен @)
Работать оно естественно не буде. Тут надо что-то типа /^[^@]+?$/gm. Вообще если это реальные, а не учебные задачи, то не надо не зная регулярок их использовать, станет только хуже. В данном случае вам проще было бы использовать вместо ReadAll - ReadLine в цикле и проверку наличия символа через простой indexOf. |
Спасибо, выражение реально помогло. Да, задача реальная, регулярок не знаю, но ничего не поделаешь - 3500 файлов, их же не будешь перебирать руками.
А вот у меня еще одна такая же проблема с .*@.*\r\n Оно удаляет строки содержащие @ в редакторах, но в JS работать не желает. Стараюсь предохраняться, контролирую количество замен добавляя и меняя такие маркеры, смотрю что упущено и т.п. |
Должно работать, возможно: /.*@.*\r?\n/g, потому как переносы строк только в винде \r\n в линуксе же просто \n, а редакторы по умолчанию рандомны.
|
Блестяще! Все сработало.
Спасибо огромнейшее! |
Часовой пояс GMT +3, время: 12:51. |