2015-04-03 51 views
1

如何從變量中創建正則表達式,以便它具有可用於調用replace()的捕獲組?從javascript中的捕獲組變量創建正則表達式

下面是我迄今爲止嘗試過的沒有成功的。

var term = 'test' 
 
var r = new RegExp('('+term+')', "ig"); 
 

 
$('#test').html($('#test').html().replace(r, '<span class="found">'+$1+'</span>')); // Uncaught ReferenceError: $1 is not defined
.found{ 
 
    background-color:yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="test">This is a test</div>

回答

2

我想這是您正常工作?主要是在替換字符串內使用$1,如<span class="found">$1</span>

var term = 'test' 
 
var r = new RegExp('('+term+')', "ig"); 
 

 
$('#test').html($('#test').html().replace(r, '<span class="found">$1</span>'));
.found{ 
 
    background-color:yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="test">This is a test</div>

+0

啊,我忘了,你只是把它在字符串中,謝謝! – DelightedD0D 2015-04-03 14:09:50

+0

是:)。此外,請查看MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)中的「使用括號子字符串匹配」,這非常有幫助。 – 2015-04-03 14:11:04

1

你需要用一個函數替換表達式。

var term = 'test' 
 
var r = new RegExp('('+term+')', "ig"); 
 

 
$('#test').html($('#test').html().replace(r, function($1){return '<span class="found">'+$1+'</span>'})); // Uncaught ReferenceError: $1 is not defined
.found{ 
 
    background-color:yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="test">This is a test</div>