Ха-ха, давайте начнем с нескольких слов. В прошлом году я использовал C# для создания инструмента подсветки синтаксиса. Он отформатировал данный код в HTML на основе информации в файле конфигурации, чтобы он мог отображать на веб-странице тот же синтаксис, что и он. в редакторе эффект выделения элементов и поддержка свертывания кода. Правильно, это похоже на то, что вы видели в блоге. Поскольку в то время я использовал MSN Space, эта функция не предоставлялась, поэтому мне пришлось написать ее самому.
Для написания я использовал C#. Сначала я использовал очень громоздкие базовые операторы, такие как for, while, switch, if и т. д., чтобы оценивать ключевые слова и т. д. Не смейтесь надо мной, я был глуп и не знал, что это такое. В то время существовало регулярное выражение, поэтому я могу использовать только этот грубый метод. Конечно, грубый метод все еще эффективен. Это просто длинный код в функции, который я думал, что его будет очень сложно поддерживать. другое программное обеспечение не может быть написано таким образом, поэтому... После некоторого поиска в Google я нашел несколько проектов с открытым исходным кодом и подсветкой синтаксиса и начал просматривать. . . . . Ух ты, все так сложно. Честно говоря, больше всего я не люблю смотреть на чужой код. Я не претенциозен, но смотреть на чужой код действительно сбивает с толку. очень подробное описание документа, иначе я не хочу на него смотреть с первого взгляда. В лучшем случае я просто смотрю, как другие люди пишут интерфейс, а потом догадываюсь, как он реализован внутри.
Хоть поиск и не очень помог, но все равно дал мне знать о регулярных выражениях, я забыл, где их видел. В то время я начал изучать регулярные выражения, совершенствуя свои «сломанные вещи». Вскоре после этого я снова начал вести блог в Blog Park и, наконец, включил функцию подсветки синтаксиса в Blog Park. Таким образом, я потерял главную мотивацию писать собственный код для подсветки HTML. Во-вторых, модуль подсветки синтаксиса, созданный на C#, может работать только на стороне сервера или в программе WinForm, и в конечном итоге я хочу получить HTML-код для отображения на странице. Я думаю, что для этой работы лучше всего подходят сценарии на стороне клиента. Жаль, что я мало что знаю о JS. . . Позже в этот период я начал возиться с другими вещами и не стал улучшать модуль подсветки синтаксиса.
Вчера вечером я работал сверхурочно и пришел домой. Изначально я планировал продолжить изучение UML и посмотреть шаблоны. Потом я вспомнил, что в компании есть модуль, который нужно удалять все HTML-теги в результатах, возвращаемых базой данных, поэтому открыл обычный. инструмент выражения RegexBuddy. В результате я увидел простое руководство по использованию регулярных выражений в JScript в справочном документе RegexBuddy, поэтому мое любопытство снова возникло, поэтому я открыл UltraEdit-32 и начал писать простой JavaScript для экспериментов.
Я не буду здесь вдаваться в подробности своего процесса тестирования, потому что во многих местах тестирование предполагает повторное тестирование и множество обходных путей. Здесь я непосредственно расскажу об использовании регулярных выражений в JScript, которые я суммировал по результатам тестирования.
Хватит ерунды, давайте перейдем к делу!
Премьер-министр рассказывает об объекте регулярных выражений JScript RegExp.
Имя класса, который обеспечивает операции с регулярными выражениями в JScript, — RegExp, а экземпляры объектов типа RegExp можно создавать двумя способами.
Метод 1, создание экземпляра конструктора:
var myRegex = new RegExp(" \w +", "igm ");
//w+ — это фактическое регулярное выражение. Обратите внимание, что первый предназначен для экранирования. igm означает игнорирование регистра, глобальный поиск и многострочный поиск соответственно. Это будет объяснено позже.
Второй способ, метод прямого присваивания:
var myRegex = /w+/igm;
//Эффект тот же, что и в предыдущем операторе, за исключением того, что здесь нет необходимости использовать символы переноса. Исходное регулярное выражение имеет тот же эффект, что и igm в предыдущем примере.
Конкретный используемый метод зависит от предпочтений каждого. Лично я считаю, что второй метод легче читать при написании регулярного выражения. В справочном документе RegexBuddy также рекомендуется второй метод. Объект RegExp включает в себя следующие операции:
exec(string str): выполняет сопоставление с регулярным выражением и возвращает результаты сопоставления. Согласно примеру выполнения, предоставленному MSDN, каждое выполнение exec начинается с конца последнего прямого совпадения. возвращаемое значение кажется объектом RerExp, и RegexBuddy объясняет, что нужно вернуть массив, но подробный пример не приведен, я думаю, что это более надежно, исходя из экспериментальных результатов.
compile(string regex, string flags): Предварительная компиляция регулярных выражений, чтобы они выполнялись быстрее. После тестирования эффективность предварительной компиляции значительно повышается. Параметр регулярного выражения представляет собой регулярное выражение, а флаги могут представлять собой комбинацию следующих трех значений: g — глобальный поиск. Результат моего теста таков, что без добавления флага g он может соответствовать только первой квалифицированной строке i — игнорируя регистр m. – Многострочный поиск по умолчанию выглядит как многострочный поиск
test(string str): если str соответствует регулярному выражению, он возвращает true, в противном случае он возвращает false. Этот метод сопоставления аналогичен объекту
RegExp строкового объекта и содержит следующие атрибуты. :
index: в строке Позиция первого совпадающего выражения, первоначально -1.
ввод: соответствующая цель регулярного выражения, обратите внимание, что она доступна только для чтения.
LastIndex: позиция следующего совпадающего выражения. Исходное слово (Возвращает позицию символа, с которого начинается следующее совпадение в искомой строке.) Я не знаю, есть ли ошибка перевода. Я не использовал этот атрибут.
LastMatch: последняя строка, соответствующая выражению
LastParen: последняя совпадающая строка частичного совпадения. Например, если в регулярном выражении есть несколько совпадений, сгруппированных по (), LastParen представляет последнюю группу совпавших результатов.
leftContext: все символы от начала целевой строки до начальной позиции последнего совпадения.
rightContext: все символы от конца последнего совпадения до конца всей целевой строки.
$1...$9: указывает результат n-й группы совпадений. Это полезно, когда в регулярном выражении имеется несколько групп ().
Далее давайте поговорим об операциях, связанных с объектом String и регулярными выражениями в JScript:
match
.(строковое регулярное выражение): принимает регулярное выражение и возвращает, соответствует ли строка выражению.
replace(srting regex, string str): Замените подстроку, соответствующую регулярному выражению, на str. Эта функция кажется простой, но она также скрывает более сложное использование. См. следующий пример.
Пример 1:
var str1 = "A:Меня зовут Питер!nB:Привет, Питер!";
str1 = str1.replace(/Питер/г,"Джек");
предупреждение (строка1);
Этот пример так же прост, как замена строки. Возможности этого выражения, конечно, не ограничиваются этим. Если вы умеете его использовать, вы также можете использовать его для выполнения многих задач, которые раньше требовали большого количества кода. Например, добавьте выделенные HTML-теги до и после ключевых слов кода. Из предыдущего примера видно, что replace может заменять только соответствующий текст новым текстом. Как я могу использовать его для вставки тегов до и после ключевых слов? Оглядываясь назад, можно сказать, что если вы можете использовать совпадающие результаты при замене, все будет проще. Просто замените ключевые слова на: заголовок тега + ключевое слово + хвост тега.
Но как использовать результаты сопоставления регулярных выражений при замене?
На данный момент нам нужно использовать «переменные сопоставления». Переменные сопоставления используются для представления результатов обычного сопоставления. Ниже приводится описание переменных сопоставления:
$& -- представляет результаты сопоставления всех совпадающих групп. Наконец, совпадающая группа — это группа () регулярного выражения.
$$ -- представляет символ $. Поскольку соответствующая переменная использует символ $, его необходимо экранировать.
$n — аналогично предыдущему $1...$9, что указывает на n-й набор совпадающих результатов.
$nn -- очень просто результат n-й группы совпадений
$` — это левый контекст, упомянутый ранее. Например, если abcdefg соответствует d, то abc — это левый контекст.
$' -- Это очень близко к приведенному выше, не поймите неправильно! , это правыйконтекст. По аналогии, efg — это правыйконтекст приведенного выше примера. Теперь нам очень просто вставлять теги до и после ключевых слов:
var str1 = "A:Меня зовут Питер!nB:Привет. Питер!" ;
str1 = str1.replace(/Peter/g, "<b>$&</b>");
предупреждение (строка1);
Уже 0:39. . . Давайте остановимся здесь.
Обычная загрузка программного обеспечения инструмента (пароль: regex): regex Buddy 2.06.zip
См. пример, который я написал: подсветка синтаксиса JScript (оптимизация кода).
Вот несколько примеров из MSDN:
функция matchDemo().
{
варс;
var re = new RegExp("d(b+)(d)","ig");
вар стр = "cdbBdbsbdbdz";
вар arr = re.exec(str);
s = "$1 содержит: " + RegExp.$1 + "n";
s += "$2 содержит: " + RegExp.$2 + "n";
s += "$3 содержит: " + RegExp.$3;
возврат(ы);
}
функция РегЭкспТест()
{
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
если (версия >= 5.5){
var src = "Дождь в Испании выпадает в основном на равнине.";
вар ре = /w+/g;
вар обр;
while ((arr = re.exec(src)) != null)
print(arr.index + "-" + arr.lastIndex + "t" + arr);
}
еще{
alert("Чтобы это работало, вам нужна более новая версия JScript");
}
}
функция matchDemo()
{
var s; //Объявляем переменную.
var re = new RegExp("d(b+)(d)","ig"); //Шаблон регулярного выражения.
var str = "cdbBdbsbdbdz"; //Строка для поиска.
var arr = re.exec(str); //Выполняем поиск.
s = "$1 возвращает: " + RegExp.$1 + "n";
s += "$2 возвращает: " + RegExp.$2 + "n";
s += "$3 возвращает: " + RegExp.$3 + "n";
s += "ввод возвращает: " + RegExp.input + "n";
s += "lastMatch возвращает: " + RegExp.lastMatch + "n";
s += "leftContext возвращает: " + RegExp.leftContext + "n";
s += "rightContext возвращает: " + RegExp.rightContext + "n";
s += "lastParen возвращает: " + RegExp.lastParen + "n";
return(s); //Вернем результаты.
}
document.write(matchDemo());
Если у проходящих мимо героев есть какие-либо мнения по поводу этой статьи, пожалуйста, оставляйте их здесь. Давайте учиться и добиваться прогресса вместе.