Регулярное выражение и метод 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? |
Небольшой пример, чтобы было нагляднее:
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(".")); В чем разница? Почему разные результаты? |
потому что после первой проверки находит точку и смещает индекс, ищет дальше, а дальше точек нету)) как не находит ничего сбрасывает индекс и по новой. У тебя же модификатор 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 |
edison,
Спасибо. |
Часовой пояс GMT +3, время: 06:15. |