Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по регулярным выражениям JavaScript (https://javascript.ru/forum/misc/13491-vopros-po-regulyarnym-vyrazheniyam-javascript.html)

demoniqus 30.11.2010 18:28

Вопрос по регулярным выражениям JavaScript
 
Столкнулся с проблемой динамической генерации регулярных выражений: с каждым циклом регулярное выражение меняется (складывается из произвольного числа разных частей, т.е. сначала new RegExp(part1 + part2), далее new RegExp(part1 + part1 + part2) и т.д.) и приходится использовать команду new RegExp. Только не знаю, как задать в это выражение модификатор ... если использовать конструкцию типа new RegExp (part1 + part2 + 'g'), то g оказывается внутри регулярного выражения его частью, а не модификатором, а если использовать конструкцию типа new RegExp (part1 + part2) + 'g', то результатом является уже строка, а не регулярное выражение...
Кто какие идеи может подкинуть для решения проблемы?

Snipe 30.11.2010 18:31

Вам в справочник, изучать new RegExp
http://javascript.ru/regexp

Вторым аргументом флаги задаются

demoniqus 30.11.2010 20:41

Невнимательность - страшная штука))) Половину инета перерыл, а ответ на поверхности...
В моем справочнике А. Гончаров "Веб-Дизайн", да и в Л.Д. Слепцова "Javascript" в RegExp не упоминается о втором необязательном параметре этой функции...

B@rmaley.e><e 30.11.2010 20:51

Значит, плохие справочники.

Snipe 30.11.2010 20:52

Цитата:

Сообщение от demoniqus (Сообщение 81606)
Невнимательность - страшная штука))) Половину инета перерыл, а ответ на поверхности...
В моем справочнике А. Гончаров "Веб-Дизайн", да и в Л.Д. Слепцова "Javascript" в RegExp не упоминается о втором необязательном параметре этой функции...

Пользуйтесь http://javascript.ru/manual :victory:

demoniqus 01.12.2010 00:05

Буду внимательно изучать.
Еще, если можете, подскажите вот такую штуку... Вот код
function mf() {
doku = document.getElementById('iframe1').contentDocument;
alert (doku);
clearTimeout(tid);

}

function AddNewScale() {
request = GenerateXMLHttpRequest ('', "php/getscale.php");
result = '<table style="width: 100%"><tr><td colspan=2 style="text-align: right;"><a href="javascript: void(0)" onClick="obj = document.getElementById(\'divNewScale\'); obj.innerHTML = \'\'; obj.style.backgroundColor = \'#ffffff\'; obj.style.borderStyle = \'none\'"><img src="img/delete.png" title="Скрыть справку" alt="Скрыть справку" style="border-style: none"></a></td></tr><tr>';
result += '<td style="width: 20%; border-right-style: solid; border-color: #aaaaaa; border-width: 3px">'
result += 'Наименование узла шкалы<br /><input type="text" size=30 maxlenght="21" id="NameNodeScale" onkeypress="CounterSymbols(\'NameNodeScale\', \'LengthNameNode\', 21)" onkeydown="CounterSymbols(\'NameNodeScale\', \'LengthNameNode\', 21)" onkeyup="CounterSymbols(\'NameNodeScale\', \'LengthNameNode\', 21)" onChange="CounterSymbols(\'NameNodeScale\', \'LengthNameNode\', 21)"/><br />';
result += '<div id="LengthNameNode" style="font-size: 0.6em">Осталось символов 21</div><br />';
result += '<div>Значения:<br /><textarea cols=23 rows=4 id="ScaleValues"></textarea><br /><span style="font-size: 0.6em">(Перечислите через точку с запятой все значения, которые будут доступны для этого признака. Например 001;002;003)</span></div><br />';
result += '<input type=button value="Сохранить" onClick="SaveNodeScale()" />';
result += '</td>';
result += '<td style="background-color: lime"><iframe id="iframe1" src="scale.svg" style="border: 0px none ; overflow: hidden; width: 400px; height: 200px;"></iframe></td></tr></table>';
document.getElementById('divNewScale').innerHTML = result;

setTimeout("mf()", 1);
alert (document.getElementById('iframe1').contentDocument);
.....

alert, который в функции mf() - 3-яч строка кода, пишет SVGDocument. В другом месте скрипт также возвращает SVGDocument
alert, который стоит непосредственно после setTimeout - 21-я строка кода, пишет HTMLDocument. Почему так происходит?


Часовой пояс GMT +3, время: 22:14.