Сообщение от Aetae
			 
		
	 | 
	| 
		Ну тут какбэ и indexOf обойтись можно.)
	 | 
	
	
	
		
			Сообщение от Aetae
			 
		
	 | 
	
		
// ......................
        return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
// ......................
	 | 
	
 
 
 
 
 
А если серьезно, позволю себе пару комментариев:
1. Внутри классов почти ничего маскировать не нужно. Правда, иногда для этого все должно быть на своих местах. Не нужно маскировать скобку [ если она в самом начале или после символа отрицания ^, не нужно маскировать ^ если ставить этот символ не в самое начало, не нужно маскировать минус, если ставить его в начале или в конце (но начало уже занято [ поэтому ставим в конце), остальные символы (кроме \ и возможно /) просто маскировать не нужно. Поэтому в итоге получаем:
//      return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
        return str.replace(/[][\/{}()*+?.\\^$|]/g, "\\$&");
2. Вариант searchBetweenReg полагается на то, что split добавляет в результирующий массив подгруппы (т.е. кусочки в скобочках) а это может быть так, а может и не быть, т.е. получается непереносимо. Значит остается первый и третий вариант.