Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.11.2014, 16:08
Интересующийся
Отправить личное сообщение для vlzkonopatov Посмотреть профиль Найти все сообщения от vlzkonopatov
 
Регистрация: 28.11.2014
Сообщений: 12

Регулярные вырожения node js
Ребята, добрый день!

Вопросик есть. Вот код которые находит в файле все ссылки на js скрипт и смотрит, если есть этот скрипт в папке, то нечего не нужно делать, а если нету, то заменить на ссылку. Но у меня почему-то меняются строки не так как нужно. Помогите!


var fs = require('fs');
var fail = fs.readFileSync("test.html", {encoding:'utf-8'});
var temp = require('stream');
var path = require('path');

var http = /((http\:\/\/)?(\w+\.)+\w+(\/[^\s]+)?(.js))/;
var adr =  /(\w+(\/[^\s]+)?(.js))/g;


var i=0;
while(adr.exec(fail)){
    temp=fail.match(adr)[i];
    console.log(temp);
    if (fs.existsSync(path.join(temp))) {console.log("Yraaa"); } else { fail = fail.replace(temp, 'http:\\temp')}
    console.log(adr.lastIndex);
    i++;

}

console.log(fail);


Я знаю ошибка скрывается тут fail = fail.replace(temp, 'http:\\temp') но как её исправить я не знаю , вместо temp ставлю adr меняет все ссылки которые найдены
Ответить с цитированием
  #2 (permalink)  
Старый 28.11.2014, 16:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,268

Сообщение от vlzkonopatov
Я знаю ошибка скрывается тут fail = fail.replace(temp, 'http:\\temp') но как её исправить я не знаю
Дык!

alert('http:\\temp');
alert('http:\\\\temp');
Ответить с цитированием
  #3 (permalink)  
Старый 28.11.2014, 16:32
Интересующийся
Отправить личное сообщение для vlzkonopatov Посмотреть профиль Найти все сообщения от vlzkonopatov
 
Регистрация: 28.11.2014
Сообщений: 12

Это конечно да. Но не то. Он меняет не то,
Ответить с цитированием
  #4 (permalink)  
Старый 28.11.2014, 16:43
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,268

Сообщение от vlzkonopatov
Он меняет не то
Тогда приведи пример строки... Расскажи, что там и на что менять...
Ответить с цитированием
  #5 (permalink)  
Старый 28.11.2014, 16:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от vlzkonopatov
var fail = fs.readFileSync("test.html", {encoding:'utf-8'});
Почему так пессимистично?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 28.11.2014, 16:52
Интересующийся
Отправить личное сообщение для vlzkonopatov Посмотреть профиль Найти все сообщения от vlzkonopatov
 
Регистрация: 28.11.2014
Сообщений: 12

я хочу что бы он менял script1.js на ссылку "http:\\......script1,js" при условие если этого js скрипта нету в папке в котором находится программа
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="script1.js"></script>
    <script src="script11.js"></script>
    <script src="script111.js"></script>
</head>
<body>

</body>
</html>


То-есть я пиши программку что бы она проверяла пути ...js в html файле. Eсли такой файл найден в папке где находится html то не чего не делать, а если такого файла нету то заменить на ссылку к файлу js

Последний раз редактировалось vlzkonopatov, 28.11.2014 в 16:58.
Ответить с цитированием
  #7 (permalink)  
Старый 28.11.2014, 17:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,268

Сообщение от vlzkonopatov
я хочу что бы он менял script1.js на ссылку "http:\\......script1,js"
Как вариант...

var str='<script src="script1.js"><'+'/'+'script>';
alert(str.replace(/(script1\.js)/,'http:\\\\......$1'));

Условие ты уже сам подпиши...
Ответить с цитированием
  #8 (permalink)  
Старый 28.11.2014, 17:11
Интересующийся
Отправить личное сообщение для vlzkonopatov Посмотреть профиль Найти все сообщения от vlzkonopatov
 
Регистрация: 28.11.2014
Сообщений: 12

Это получается для частного случая. Я писал для всех js файлов
Но если смотреть по моему коду то там будет видно всё код почти правильный
но в этом месте
fail = fail.replace(adr, 'http:\\temp')}

Меняется сразу все ссылки в файле, а мне нужно же только те которые не работают
Ответить с цитированием
  #9 (permalink)  
Старый 28.11.2014, 17:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Вторым аргументом функцию передай. Смотри доки короче по replace
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 28.11.2014, 18:16
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

сабжевая замена делается за один реплейс.
Упрощенный пример: в тексте есть числа, и те из них, которые больше 100, заменить на слово "PREVED"
var str = "gdfnfdn 6546754 tehterth 4 474 ghgfd 67 hfgdggj  111";
var strNew = str.replace(/\d+/g, function(a) {
  return parseInt(a, 10) > 100 ? "PREVED" : a;
});
alert(strNew);


как этот пример допилить к сабжу, думаю, понятно.

---
но это если операции с файловой системой синхронные. А если асинхронные (как и должно быть на сервере) - то чуть сложнее: обходим строку в цикле, как в твоем коде, находим все файлы, добавляем их в карту и по каждому запускаем асинхронный fs.exists. Калбэки к fs.exists подставляют в карту значения true, если файл есть. Ну и последний сработавший калбэк делает вышеупомянутый реплейс, используя карту.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка файла. Узнать существует он или нет. Node js vlzkonopatov AJAX и COMET 8 28.11.2014 19:28
Проверка фала. Узнать существует он или нет. Node js vlzkonopatov AJAX и COMET 0 28.11.2014 12:05
Node js ошибка в console. Chrome AJAX и COMET 3 21.08.2014 14:23
JS и регулярные выражения. LRCenter Общие вопросы Javascript 5 03.05.2011 16:53
регулярные выражения в JS bifidokk Events/DOM/Window 2 02.06.2008 12:29