Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2010, 23:30
Интересующийся
Отправить личное сообщение для googlebot Посмотреть профиль Найти все сообщения от googlebot
 
Регистрация: 14.06.2010
Сообщений: 11

RegExp + Selection
Здраствуйте,

помогите разобраться, почему RegExp в моем примере, не захватывает текст по бокам, а выводит только значение переменной "text"?
<script type="text/javascript">
window.onload = function() {
	document.getElementById("click").onclick = function() {
		if (window.getSelection) {
			text = window.getSelection().toString();
		}
		//...
*!*
		regex = new RegExp('(.*)' + text + '(.*)','gim');
		str = regex.exec(text);
*/!*
		alert(str + "\n");
	};
};
</script>


<a href="#" id="click">Click</a>
<p>Выделить часть текста и нажать на ссылку!</p>

Последний раз редактировалось googlebot, 15.06.2010 в 00:17.
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2010, 00:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,078

у тебя regex больше чем text что он должен захватить?
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2010, 09:16
Интересующийся
Отправить личное сообщение для googlebot Посмотреть профиль Найти все сообщения от googlebot
 
Регистрация: 14.06.2010
Сообщений: 11

Сообщение от рони
у тебя regex больше чем text что он должен захватить?
при выделении части текста, эта часть записывается в переменную (тут все ок), а нужно чтобы помимо этого текста захватился текст еще по краям (в данном случае, весь текст)
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2010, 10:08
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от googlebot
regex = new RegExp('(.*)' + text + '(.*)','gim'); 09        str = regex.exec(text);
а что по вашему должен вернуть этот код?
гляньте на мой измененный пример:
var text='some text';
var reg_text='(.*)' + text + '(.*)';
regex = new RegExp(reg_text,'gim');
alert(reg_text)
str = regex.exec(text);
alert(str)

подумайте, разве данная регулярка должна выводить что-то еще кроме всего содержимого переменной text
Ответить с цитированием
  #5 (permalink)  
Старый 15.06.2010, 10:55
Интересующийся
Отправить личное сообщение для googlebot Посмотреть профиль Найти все сообщения от googlebot
 
Регистрация: 14.06.2010
Сообщений: 11

Сообщение от Gvozd Посмотреть сообщение
подумайте, разве данная регулярка должна выводить что-то еще кроме всего содержимого переменной text
да, я понимаю о чем вы, поэтому и попросил помочь разобраться.

скрестив ваш код, результат есть но он все равно не совсем тот.


window.onload = function() {
	document.getElementById("click").onclick = function() {
		if (window.getSelection) {
			text = window.getSelection().toString();
			var reg_text='(.*)' + text + '(.*)';
			regex = new  RegExp(reg_text,'gim');
		}
		alert(reg_text)
	};
};


//сейчас выводит: '(.*)' часть текста '(.*)'

//а нужно: Выделить часть текста и нажать на ссылку!", а не только выделенный

заместо '(.*)' нужно чтобы сработал regexp и захватил еще код по бокам т.е. вывел весь текст "Выделить часть текста и нажать на ссылку!", а не только выделенный.
Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2010, 20:33
Интересующийся
Отправить личное сообщение для googlebot Посмотреть профиль Найти все сообщения от googlebot
 
Регистрация: 14.06.2010
Сообщений: 11

Может я некорректно вопрос задал
Есть ли вообще возможность получить текстовое содержимое рядом с выделеным текстом
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2010, 20:43
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Можно. Уточните границы, рядом с текстом понятие растяжимое.
Ответить с цитированием
  #8 (permalink)  
Старый 15.06.2010, 20:49
Интересующийся
Отправить личное сообщение для googlebot Посмотреть профиль Найти все сообщения от googlebot
 
Регистрация: 14.06.2010
Сообщений: 11

text =  window.getSelection().toString();
var reg_text='[\.](.*)' + text + '(.*\.)','gim';


т.е. от точки (или начала строки) до точки, если выделен текст, то нужно подхватить содержимое рядом с ним по краям (абзац).
Ответить с цитированием
  #9 (permalink)  
Старый 15.06.2010, 21:14
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

В цикле двигайте границы выделения, пока в него не попадут точки или оно не выйдет за пределы блока.

Для IE:
var range = document.selection.createRange(), text = range.text;
while (пока нет точки в начале text, и range в пределах нужного блока) {
   range.moveStart("character", -1);
   text = range.text;
   …
}
while (пока нет точки в конце text, и range в пределах нужного блока) {
   range.moveEnd("character", 1);
   text = range.text;
   …
}
Проверять нахождение в пределах блока можно поднимаясь вверх по дереву от range.parentElement().

Для остальных браузеров схема другая:
1. Получите все текстовые узлы (nodeType = 3) внутри блока, поместив их в массив.
2. Найдите в получившемся массиве элемент range.startContainer.
3. В цикле от элемента range.startContainer - 1 до начала массива складывайте nodeValue и ищите последнюю точку.
4. Для range.endContainer тоже самое в противоположном направлении.

Почитать здесь: http://fastcoder.org/articles/?aid=609

Последний раз редактировалось Octane, 15.06.2010 в 21:20.
Ответить с цитированием
  #10 (permalink)  
Старый 15.06.2010, 21:18
Интересующийся
Отправить личное сообщение для googlebot Посмотреть профиль Найти все сообщения от googlebot
 
Регистрация: 14.06.2010
Сообщений: 11

Спасибо, буду разбираться
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
evalScripts без regexp и eval Diem Events/DOM/Window 1 30.07.2009 17:34
Как опознать RegExp. Kolyaj Общие вопросы Javascript 25 04.07.2009 01:41
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 16:35
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19