#javascript #regex
#javascript #регулярное выражение
Вопрос:
Можете ли вы помочь мне с некоторыми регулярными выражениями. Редактор Razor и я хочу, когда просматриваю содержимое и нахожу }
, чтобы установить новый порядок, но пропускаю, когда я }}
.
Например:
HTML-файл
<tittle> {{ title }} </title> <-- it remains so
<script>
function name () {
some code...
} <-- go to new line
Мой код таков:
var readableHTML = text.trim();
var lb = 'rn';
var tab = "u0020u0020u0020u0020";
//Check for brackets
readableHTML = readableHTML.replace(new RegExp(" {", 'gi'), lb tab "{");
readableHTML = readableHTML.replace(new RegExp("({{([^{}]*)}})([^}])", 'gi'), lb tab "}"); <-- This is my wrong regex
Комментарии:
1. Какова ваша цель: вы хотите улучшить код JavaScript?
2. что-то вроде этого да. но мне нужно только для этой части. Tnks
3. Почему вы используете группировку или нечувствительность к регистру?
4. Я новичок в этом деле. Я несколько раз пытаюсь сделать это правильно. Я использую этот сайт для этого: regex101.com/r/o9Pt7s/1
5. Поймите, что
function f() {{ return 1; }}
это допустимый JavaScript. Что вы хотите, чтобы с этим произошло?
Ответ №1:
Кажется, вы хотите добавлять новые строки только перед закрытием фигурных скобок, когда это касается JavaScript. Поэтому я бы посоветовал вам ограничить область замены script
тегами. Для этого вы могли бы использовать анализатор DOM, который поможет идентифицировать эти script
элементы и позволит вам изменять их содержимое.
function replaceInScripts(html, find, replace) {
var doc = new DOMParser().parseFromString(html,"text/html");
Array.from(doc.querySelectorAll('script'), function(script) {
script.textContent = script.textContent.replace(find, replace);
});
return doc.documentElement.outerHTML;
}
// Sample data:
var html = `<html>
<head>
<title> {{ title }} </title>
</head>
<body>
<script>
function name () { return 1; }
</script>
</body>
</html>`;
// Call the function for replacing text within script elements only:
html = replaceInScripts(html, /(S)s*}/g, '$1n }');
// Output updated HTML:
console.log(html);
Ответ №2:
Почему бы и нет?
readableHTML = readableHTML.replace(new RegExp(" {", 'gi'), lb tab "{");
readableHTML = readableHTML.replace(new RegExp(" {{2}", 'gi'), lb tab "{{");
readableHTML = readableHTML.replace(new RegExp(" }", 'gi'), lb tab "}");
readableHTML = readableHTML.replace(new RegExp(" }{2}}", 'gi'), lb tab "}}");