Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.08.2013, 12:06
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Регулярное выражение и метод test
В продолжении темы.

Для тех кому не охота лезть в ту тему:
Делаем просмотр версий 2-х документов.

Задача отобразить на странице 2 похожие формы, сравнить их содержимое и выделить цветом отличия. Для решения данной задачи, я забрал содержимое форм, разбил текст на массив с помощью:
var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g;
text1 = text1.replace(re, ' $1').split(' ');

(Спасибо devote за регулярное выражение, в коих я очень слаб).

Все сработало шикарно, и теперь мне надо из измененных массивов склеить обратно строку, так, чтобы перед знаками препинания не было пробелов. То есть просто
text1 = text1.join(' ');

мне не подходит.

Я написал:
function myJoin(arr) {
            var str = "";

            for (var i = 0; i < arr.length; i++) {

                if (/([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g.test($(arr[i]).text()) || (i == 0)) {
                    str = str + arr[i];
                } else {
                    str = str + " " + arr[i];
                }

            }

            return str;
        }

        text1 = myJoin(text1);
        text2 = myJoin(text2);


Но, я столкнулся с проблемой. Вывод с консоли:
//re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g
re.test(".")
true
re.test(".")
false
re.test(".")
true
re.test(".")
false
re.test(".")
true
re.test(".")
false


Как одно и то же регулярное выражение одним и тем-же методом выдает то true, то false?
Ответить с цитированием
  #2 (permalink)  
Старый 30.08.2013, 12:59
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Небольшой пример, чтобы было нагляднее:
alert(/([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g.test("."));
alert(/([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g.test("."))
alert(/([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g.test("."))
alert(/([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g.test("."))

var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g;
alert(re.test("."));
alert(re.test("."));
alert(re.test("."));
alert(re.test("."));


В чем разница? Почему разные результаты?

Последний раз редактировалось tsigel, 30.08.2013 в 13:02.
Ответить с цитированием
  #3 (permalink)  
Старый 30.08.2013, 13:41
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

потому что после первой проверки находит точку и смещает индекс, ищет дальше, а дальше точек нету)) как не находит ничего сбрасывает индекс и по новой. У тебя же модификатор g.
var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g;
alert(re.test("..")); //true
alert(re.test("..")); //true
alert(re.test("..")); //false
alert(re.test("..")); //true


var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g;
re.lastIndex=0;
alert(re.test(".")); //true
re.lastIndex=0;
alert(re.test(".")); //true
re.lastIndex=0;
alert(re.test(".")); //true
re.lastIndex=0;
alert(re.test(".")); //true


var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/;
alert(re.test(".")); //true
alert(re.test(".")); //true
alert(re.test(".")); //true
alert(re.test(".")); //true
Ответить с цитированием
  #4 (permalink)  
Старый 30.08.2013, 13:47
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

edison,
Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
регулярное выражение literator Ваши сайты и скрипты 1 18.08.2013 18:24
onResize() для DIV-a faiwer Общие вопросы Javascript 6 26.06.2012 15:27
Помогите написать регулярное выражение! Dorian_bs Общие вопросы Javascript 7 09.12.2011 09:12
Регулярное выражение: любой символ, включая перевод строки Gleb Общие вопросы Javascript 3 28.07.2011 12:15
регулярное выражение theo_ Общие вопросы Javascript 15 21.06.2010 10:29