Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/58: Рейтинг темы: голосов - 58, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19

Регулярные выражения. Выделить только цифры кроме букв и (_) до и после

16.12.2012, 19:30. Показов 11485. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Подскажите, пожалуйста, как правильно составить регулярное выражение, чтобы выделить только те цифры, перед и после, которыми нет букв и символа нижнего прочерка (_) ?

Например, эти цифры нужно выделить:

,0
12
123
,43,
.01
&&50
100 &&

А эти не нужно:

bfr_ind01
hello_03
02_qwerty

Сейчас стоит такой вариант:

{ regex: /,[0-9]/gm, css: 'number' }

Пробовал что-то вроде этого и различные вариации:

{ regex: /(\W\s)[0-9](\W\s)/gm, css: 'number' }

...но так ничего толкового и не вышло. Частично только добиваюсь результата. Подскажите, как правильно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2012, 19:30
Ответы с готовыми решениями:

Регулярные Выражения. В строке только цифры
Знаю как проверить наличие в строке только цифр кодом 1с. Но вот уперлось сделать это с помощью регулярных выражений. Не силен в них. Делаю...

Регулярные выражения - вывод сообщения об ошибке при нахождении в строке выражения, начинающегося с цифры
Нужно чтобы при нахождении в строке выражения начинающегося с цифры появлялось сообщение об ошибке,например если ввести :2a,то будет...

Регулярные выражения - найти все кроме слова
Здравствуйте. Помогите кто может. Уже сломал всю голову. Есть регулярное выражение. (?<=<tr>\s*?<td\...

14
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
16.12.2012, 21:26
пример строки неудачный, как понял, так и сделал
в скобки заворачивается то что находится, для наглядности
в данной строке пропускается 12 и 100, для них нет первого обрамляющего символа
JavaScript
1
2
3
4
5
6
var s1, s2;
s1='0 12 123 ,43, .01 &&50 100 && А эти не нужно: bfr_ind01 hello_03 02_qwerty';
 
s2=s1.replace(/(^|[^0-9A-zА-яЁё_]{1})([0-9]+)([^0-9A-zА-яЁё_]{1}|$)/g, "$1($2)$3");
 
alert(s1+'\n'+s2);
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
16.12.2012, 21:51  [ТС]
Цитата Сообщение от newJS Посмотреть сообщение
пример строки неудачный, как понял, так и сделал
в скобки заворачивается то что находится, для наглядности
в данной строке пропускается 12 и 100, для них нет первого обрамляющего символа
JavaScript
1
2
3
4
5
6
var s1, s2;
s1='0 12 123 ,43, .01 &&50 100 && А эти не нужно: bfr_ind01 hello_03 02_qwerty';
 
s2=s1.replace(/(^|[^0-9A-zА-яЁё_]{1})([0-9]+)([^0-9A-zА-яЁё_]{1}|$)/g, "$1($2)$3");
 
alert(s1+'\n'+s2);
Круто, спасибо. Не хватает только самой малости. Как исключить символы, такие как запятая (,) точка с запятой (;) и т.д. А то сейчас они относятся к цифрам и тоже окрашиваются (работаю со стилями (CSS) синтаксиса).
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
16.12.2012, 22:42  [ТС]
Во вложении скриншот, на котором видно, что выражение:

JavaScript
1
{ regex: /(^|[^0-9A-zА-яЁё_]{1})([0-9]+)([^0-9A-zА-яЁё_]{1}|$)/g,   css: 'number' }
...хорошо справляется со строками под номерами 22, 24, 25, пропуская цифры и не окрашивая их в зелёный цвет. Цифры в строках под номерами 13, 14, 15, 16 окрашиваются в зелёный цвет, но вместе с ними окрашиваются и символы рядом. В данном случае запятая (,) и точка с запятой (;). Как их исключить?
Миниатюры
Регулярные выражения. Выделить только цифры кроме букв и (_) до и после  
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
16.12.2012, 23:33
попробуйте за 2 прохода:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<style>
body {color: blue}
span {color: red}
</style>
 
<script>
var s1, s2;
s1 = '0 12 123 ,43, .01 &&50 100 && А эти не нужно: bfr_ind01 hello_03 02_qwerty';
 
s2 = s1.replace (/(^|\s|[^0-9a-z_])(\d+)/ig, '$1<span>$2</span>').
        replace (/<span>(\d+)<\/span>([0-9a-z_])/g, '$1$2');
 
document.write (s1 + '<br>' + s2);
</script>
1
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
17.12.2012, 00:54  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
попробуйте за 2 прохода:
О, вот это то, что нужно! Спасибо. Но у меня проблема. Я пытаюсь настроить свой стиль (для пользовательского языка) в среде подключаемой библиотеки Syntax Highlighter 3. И там регулярные выражения нужно вносить вот в таком формате (с 14 по 33 строку):

//---

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
;(function()
{
    // CommonJS
    typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;
 
    function Brush()
    {
        var funcs         = 'OnTimer OnDeinit Print EventKillTimer MessageBox';
        var keywords      = 'MQL5_PROGRAM_NAME REASON_REMOVE IDYES';
        var operators     = 'define property return void if const long int';
        var handle        = 'iMA iCCI';
        //---
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,            css: 'comments' },
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,             css: 'comments' },
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,             css: 'string' },
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,             css: 'string' },
            { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },
            //---
            { regex: new RegExp(this.getKeywords(funcs), 'gm'),                 css: 'functions' },
            { regex: new RegExp(this.getKeywords(operators), 'gm'),             css: 'operator' },
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),              css: 'keyword' },
            { regex: new RegExp(this.getKeywords(handle), 'gm'),                css: 'handle' },
            //---
            { regex: /\/\/.*/g,                                                 css: 'comments' },
            { regex: /[0-9]/gm,                                                 css: 'number' }
            /*
            { regex: /(?:[^a-zа-я_]|^)(\d+)(?:[^a-zа-я_]|$)/gm,                 css: 'number' },
            { regex: /(^|[^0-9A-zА-яЁё_]{1})([0-9]+)([^0-9A-zА-яЁё_]{1}|$)/gm,  css: 'number' },
            { regex: /(?:[^\w_]|^|\b)(\d+)(?:[^\w_]|$|\b)/g,                    css: 'number' }
            */
            ];
    };
    //---
    Brush.prototype = new SyntaxHighlighter.Highlighter();
    Brush.aliases   = ['mql5', 'MQL5'];
    //---
    SyntaxHighlighter.brushes.Mql5 = Brush;
    //---
    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();
//---

Подскажите, как Ваш вариант можно прописать в таком формате?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
17.12.2012, 01:26
увы, не знаю
похоже, ваша задача не имеет решения
ибо формат этот предусматривает прямое совпадение с шаблоном

дело в том, что регулярки в javascript'e в отличие от других языков не поддерживают "заглядывания вперёд",
т.е. конструкции (?<=шаблон) и (?<!шаблон) в javascript'e не работают

а без них составить выражение с прямым совпадением в вашем случае невозможно
для прочих языков ваша задача решалась бы просто /(?<!^|\s|[^\da-z_])\d+(?![\da-z_])/ig, но вот выделенное красным в javascript'e не работает
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
17.12.2012, 01:57  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
увы, не знаю
похоже, ваша задача не имеет решения
ибо формат этот предусматривает прямое совпадение с шаблоном
...
Жаль. Придётся отказаться от цифр в именах переменных. Римскими что ли писать. )) А автор библиотеки на своей стороне этот вопрос может решить? Может ему написать в качестве пожелания... Или это в принципе не решаемая проблема в JS?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
17.12.2012, 02:13
вы не поняли
эта задача на javascript'e решается
через так называемые "ссылки на найденный текст" - эти самые $1, $2, $3... во втором параметре метода replace ()

но в данном формате наложено ограничение - использовать можно только прямое совпадение
-----

а) если узнать, как именно оформляются выделения css: 'number' в HTML-коде
[это просто - запустите файл в браузере FF, ткните правой кнопкой мыши в "зелёную" цифру, выберите в контекстном меню "Исследовать элемент" и посмотрите - какими именно тегами "окаймлена" эта цифра; нужен точный HTML-код]

б) если "покопаться" в функциях библиотеки Syntax Highlighter 3 и найти там то место, где все теги подсветки уже прописаны

то тогда вполне можно будет "сконструировать" одну-две строчки кода и вставить их вовнутрь файла библиотеки и ваша задача будет решена
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
17.12.2012, 02:36  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
вы не поняли
эта задача на javascript'e решается
через так называемые "ссылки на найденный текст" - эти самые $1, $2, $3... во втором параметре метода replace ()

но в данном формате наложено ограничение - использовать можно только прямое совпадение
-----

а) если узнать, как именно оформляются выделения css: 'number' в HTML-коде
[это просто - запустите файл в браузере FF, ткните правой кнопкой мыши в "зелёную" цифру, выберите в контекстном меню "Исследовать элемент" и посмотрите - какими именно тегами "окаймлена" эта цифра; нужен точный HTML-код]

б) если "покопаться" в функциях библиотеки Syntax Highlighter 3 и найти там то место, где все теги подсветки уже прописаны

то тогда вполне можно будет "сконструировать" одну-две строчки кода и вставить их вовнутрь файла библиотеки и ваша задача будет решена
Отлично! Я так рад, что я ошибся. )) Значит ещё не всё потеряно, так как все исходники у меня есть. Это свободная библиотека.

Там всё через стили (классы) CSS реализовано (скриншот в прицепе). Я подготовил маленький пример (тоже в прицепе). Там всё в одной папке. Скрипты, стили и html-страничка для теста. Посмотрите, пожалуйста. А то уже на другом форуме написали, что так сделать нельзя, а я в ответ подтвердил, что и здесь также ответили. ))) Придётся теперь, если вопрос решиться, везде отписать, что всё на самом деле ОК и жить можно. )))
Миниатюры
Регулярные выражения. Выделить только цифры кроме букв и (_) до и после  
Вложения
Тип файла: zip SHL.zip (13.4 Кб, 6 просмотров)
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
17.12.2012, 12:22
1) в файле shBrushMql5.js про 'number' оставляете только
JavaScript
1
{ regex: /\d+(?![\dA-zÀ-ÿ¨¸_])/igm,     css: 'number' }
2) в файле shCore.js редактором ищете строку символов
...;b=J.49(b,d);I(J.V("41-40"))b=E(b);...
и аккуратно вставляете в неё выделенное красным
...;b=J.49(b,d);b=q(b);I(J.V("41-40"))b=E(b);...

3) кроме того, в этом же файле shCore.js перед строкой eval(function(p,a,c,k,e,d)...
вставляете код функции
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
//
function q (a)
{
var b = '</code><code class="mql5 number">',
    c = 'Q1W2E3R4T5Y6', d = a.split (b);
for (var j = 0; j < d.length - 1; j++)
   {
   var e = d [j].length - 1;
   if ((/[\dA-zÀ-ÿ¨¸_]/i).test (d [j].charAt (e))) d [j] += c;
   }
return d.join (b).split (c + b).join ('');
}
//
1
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
17.12.2012, 12:23  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
1) в файле shBrushMql5.js про 'number' оставляете ...
Круто! Как можно разобраться в этом сплошном регулярном хаосе? ))

Спасибо. Всё чётко работает.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
17.12.2012, 12:39
"это элементарно, Ватсон!"
самая первая функция в исходном коде просто распаковывает javascript-код и заносит его в переменную p, которую затем возвращает инструкцией return p;

соответственно, если прописать вместо return p; инструкцию document.write ('<plaintext>' + p);, то на странице появится обычный читабельный javascript-код
[этот замечательный тег <plaintext> давно объявлен запрещённым --- идиоты в W3C сидят, честное слово ]

ну а далее найти то место, где в создаваемую таблицу прописывается созданный код "подсветки", уже не трудно
труднее было найти незадействованную в коде односимвольное имя переменной... пришлось вставить цикл и проверять typeof всех букв алфавита по очереди... на букве q цикл выявил undefined
вот и появилось имя для функции

ну а потом нашёл редактором в параметрах распаковывающей функции кусочек (b,d); - он оказался уникальным, ну и вставил после неё вызов функции q ()

вот и всё
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
17.12.2012, 12:55  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
"это элементарно, Ватсон!"
Для меня это пока не элементарно, а мега-волшебно. Ощутил каждой клеткой, насколько мало я ещё знаю. )))
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 19
03.01.2013, 14:01  [ТС]
Подскажите, а какие нужно внести изменения, если нужно ещё, чтобы между квадратными скобками к цифрам тоже применялся стиль? Вроде бы это последний штрих, насколько проверил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.01.2013, 14:01
Помогаю со студенческими работами здесь

Реализация программы, издающей писк только при вводе латинских букв после цифры
Необходимо создать программу, издающую писк(звуковой сигнал) только при вводе латинских букв после цифр. Прошу подсказать, как и где...

Регулярные выражения: выделить слово из строки
есть строка class Program Из нее надо выделить Program private void button1_Click(object sender, EventArgs e) { string s = Строка...

Выделить пары символов, используя регулярные выражения
В заданной строке все пары символов, первый из которых – малая латинская буква, а второй – большая латинская буква, выделить знаками...

Выделить из строки имя компьютера, используя регулярные выражения
День добрый! Никак не удается мне один фокус. Имеем таку строчку: Нужно вытащить Причем здесь может попадаться и кириллица.

Регулярные выражения. Выделить текст между двумя выражениями
Необходимо выделить текст между двумя выражениями: &lt;table:table-row&gt; и &lt;/table:table-row&gt;. Есть идея с помощью strpos найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru