Удаление 2 случайных команд, только если они НЕ в строковых литерах
Текст является программной на Javascript, удалить две команды JS, но только если они не в строковых литерах (break как команду удалить можно, а в строке "break my heart" нельзя).
Пример переменной: var jsScript = 'var text = "hello world"; alert(text);'; Чувствую путь спасения через RegExp. Вычитал в учебнике поиск слов только в строковых литерах, но как удалить именно не в них, ещё и случайно и потом вывести переменную jsScript с сохранившейся структурой ума не приложу. |
Что-то я не до конца понял, чего вы хотите. Но команды отделяются символом ";". Так что можно попробовать разбить строку с командами на массив
var jsScript = 'var text = "hello world"; alert(text);'; var x = jsScript.split(';'); И теперь уже легче намного манипулировать ими. Перебирать циклами. К примеру в данном случае: x[0] // выведет var text = "hello world" x[1] // выведет alert(text) Ну а дальше можно их проверять, удалять. Можно добавлять, перемещать и все, что хотите. Без RegExp. |
Мне требуется удалить случайное слово. Но оно не должно входить в "" или ''. Например из примера
Код:
var jsScript = 'var text = "hello world"; alert(text);'; |
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> |
Цитата:
var jsScript = 'var text = "hello world"; alert(text);'; var x = jsScript.split(/"[\s\S]+?"/); alert(x); |
Идеи по решению:
https://jsfiddle.net/rqgsn72p/ сначала создает массив границ слов. Потом берет случайный элемент массива. Выкидывает это слово из строки. в примере должно выкидывать только word0, word5 или word6. Прочие ворды сидят в строках или регексах |
если в строке могут быть ещё и комментарии, придется допиливать.
|
Всем спасибо. Вы очень выручили, пойду грызть учебник по JS дальше.
|
Часовой пояс GMT +3, время: 07:16. |