Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Открытая скобка в переменной (https://javascript.ru/forum/misc/67184-otkrytaya-skobka-v-peremennojj.html)

123456 02.02.2017 14:51

Открытая скобка в переменной
 
Здравствуйте!

Столкнулся с такой проблемой, никак не приложу ума как её решить. Был бы очень признателен за помощь.


Есть такой скрипт (кусок кода):

function find_relates ( )
	{
		var title = document.getElementById('title').value;
		
		var tit = title.substr(0, 60);
		
		...
                      
      if($(this).html().search(tit) == 0) {			// - Проблема проявяеться в этом месте (!!!)
    
    ...


Все работает прекрасно, НО до того момента как в переменную tit (title) попадает открытая скобка "(". Из-за нее рушится вся дальнейшая работа JS на странице. Подскажите как можно экранировать эту самую скобку? В случае когда переменная имеет статичные данные, там понятно, все ее содержимое отделено кавычками, а как быть когда переменная равна переменной?

Diphenyl Oxalate 02.02.2017 14:56

$(this).html().search( tit.replace(/\(/g, "") );

123456 02.02.2017 15:10

Цитата:

Сообщение от Diphenyl Oxalate (Сообщение 442959)
$(this).html().search( tit.replace(/\(/g, "") );

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

Вот более полный код:

function find_relates ( )
	{
		var title = document.getElementById('title').value;
		
		var tit = title.substr(0, 60);
		
		ShowLoading('');

		$.post('engine/ajax/find_relates.php', { title: title }, function(data){
	
			HideLoading('');
	
			$('#related_news').html(data);				
			
			$('#related_news a').each(function(){
												
				if($(this).html().search(tit) == 0) {					
					$(this).css({'color': 'red', 'fontWeight': 'bold'});
				}
				
			})

		$('#short_story').text(title);

...

Diphenyl Oxalate 02.02.2017 15:13

replace не изменяет исходную строку. Переменная tit остаётся прежней.

123456 02.02.2017 15:20

Цитата:

Сообщение от Diphenyl Oxalate (Сообщение 442964)
replace не изменяет исходную строку. Переменная tit остаётся прежней.

Это понятно, так код то все равно работать не будет так (находить соответствие между: "..это строка (со скобкой.." и "..это строка со скобкой..").

123456 02.02.2017 15:33

Других способов нет указать скрипту что значение переменной является именно значением а не куском кода?

рони 02.02.2017 15:53

123456,
строка 6
tit = tit.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");

123456 02.02.2017 16:18

Цитата:

Сообщение от рони (Сообщение 442978)
123456,
строка 6
tit = tit.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");

Эмм, тут есть еще момент. Все это дело (вызов JS) происходит в PHP файле посредством функции
echo "";


Так вот, после вставки на 6 строку указанного кода (кавычки пробовал менять на одинарные), выдает такую ошибку при попытке открытия страницы:

Parse error: syntax error, unexpected '}' in /home/z/myname/site.ru/public_html/engine/inc/addnews.php on line 175


175 строкой как раз и является данная вставка.

123456 02.02.2017 16:21

Убрал из вставки фигурные скобки, страничка открылась, но JS не фурычит.

Браузер (консоль) выдает такую ошибку:
Uncaught SyntaxError: Invalid regular expression: missing /

123456 03.02.2017 10:56

Больше ни у кого идей нет?


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