Удаление 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, время: 04:23. |