Javascript.RU

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

Удаление 2 случайных команд, только если они НЕ в строковых литерах
Текст является программной на Javascript, удалить две команды JS, но только если они не в строковых литерах (break как команду удалить можно, а в строке "break my heart" нельзя).

Пример переменной: var jsScript = 'var text = "hello world"; alert(text);';

Чувствую путь спасения через RegExp. Вычитал в учебнике поиск слов только в строковых литерах, но как удалить именно не в них, ещё и случайно и потом вывести переменную jsScript с сохранившейся структурой ума не приложу.
Ответить с цитированием
  #2 (permalink)  
Старый 24.09.2017, 15:17
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Что-то я не до конца понял, чего вы хотите. Но команды отделяются символом ";". Так что можно попробовать разбить строку с командами на массив

var jsScript = 'var text = "hello world"; alert(text);';
var x = jsScript.split(';');


И теперь уже легче намного манипулировать ими. Перебирать циклами.
К примеру в данном случае:

x[0] // выведет var text = "hello world"
x[1] // выведет alert(text)


Ну а дальше можно их проверять, удалять. Можно добавлять, перемещать и все, что хотите. Без RegExp.
Ответить с цитированием
  #3 (permalink)  
Старый 25.09.2017, 06:39
Новичок на форуме
Отправить личное сообщение для Shellait Посмотреть профиль Найти все сообщения от Shellait
 
Регистрация: 24.09.2017
Сообщений: 3

Мне требуется удалить случайное слово. Но оно не должно входить в "" или ''. Например из примера
Код:
var jsScript = 'var text = "hello world"; alert(text);';
Нельзя удалить hellow world. Так как они входят в "", а например text уже можно, поскольку это получается отдельное слово.
Ответить с цитированием
  #4 (permalink)  
Старый 25.09.2017, 08:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Shellait,
<script>
var jsScript = 'var text = "hello world"; alert(text);';

function fn(str, num) {
    var reg = /\w+|".*?"|'.*?'/g,
        arr = str.match(reg);
    if (arr) {
        arr = arr.reduce(function(a, b, i) {
            if (!/"/.test(b)) a.push(i);
            return a
        }, []);
        for (; arr.length > num;) arr.splice(Math.random() * arr.length | 0, 1);
        num = 0;
        str = str.replace(reg, function(a) {
            return arr.indexOf(num++) > -1 ? "" : a
        })
    }
    return str
};
for (var i=0; i<5; i++)  {document.write(fn(jsScript, 2)+"<br>")}

</script>
Ответить с цитированием
  #5 (permalink)  
Старый 25.09.2017, 08:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от void() Посмотреть сообщение
Но команды отделяются символом ";". Так что можно попробовать разбить строку с командами на массив
var jsScript = 'var text = "hello world"; alert(text);';
var x = jsScript.split(';');
Если разбивать, то разбивать лучше так
var jsScript = 'var text = "hello world"; alert(text);';
var x = jsScript.split(/"[\s\S]+?"/);
alert(x);
Ответить с цитированием
  #6 (permalink)  
Старый 25.09.2017, 10:25
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Идеи по решению:

https://jsfiddle.net/rqgsn72p/

сначала создает массив границ слов. Потом берет случайный элемент массива. Выкидывает это слово из строки.

в примере должно выкидывать только word0, word5 или word6. Прочие ворды сидят в строках или регексах

Последний раз редактировалось Alexandroppolus, 25.09.2017 в 13:39.
Ответить с цитированием
  #7 (permalink)  
Старый 25.09.2017, 13:41
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

если в строке могут быть ещё и комментарии, придется допиливать.
Ответить с цитированием
  #8 (permalink)  
Старый 25.09.2017, 19:57
Новичок на форуме
Отправить личное сообщение для Shellait Посмотреть профиль Найти все сообщения от Shellait
 
Регистрация: 24.09.2017
Сообщений: 3

Всем спасибо. Вы очень выручили, пойду грызть учебник по JS дальше.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заполнить textarea только если он пустой? Oleg0 jQuery 5 10.02.2017 09:45
Скрипт работает только если подключать js в самом низу html! Pekkonen jQuery 3 26.01.2011 01:44