Регулярное выражение и метод 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, время: 19:23. |