2013-05-20 71 views
0

我想做一個過濾器,其中有很多選項,被列在過濾器的頂部,現在,我試圖添加國家,我決定使用正則表達式。但是我無法讓它工作,出於某種原因,它取代了字符串的中間而不是開始。RegEx Javascript替換?

JS代碼:

function countryCheck(object) { 
    var filter = document.getElementById("search_filter"); 
    var re = new RegExp("<b>Location<\/b>:\s[a-zA-Z\s]+\s\|\s"); 
    filter.innerHTML = filter.innerHTML.replace(re, ("<b>Location</b>: " + object.value.replace("&nbsp;&nbsp;", "") + " | ")); 
} 

HTML代碼:

<div id='search_filter'><b>Filter</b>: <b>Location</b>: Anywhere | <b>Player Slots</b>: >=0/>=0</div> 
<br /> 

<select class='select' style='width:100%;' onchange='countryCheck(this);'> 
    <option>Anywhere</option> 
    <option>Europe</option> 
    <option>&nbsp;&nbsp;Sweden</option> 
    <option>&nbsp;&nbsp;Germany</option> 
    <option>&nbsp;&nbsp;United Kingdom</option> 
    <option>&nbsp;&nbsp;France</option> 
    <option>North America</option> 
    <option>&nbsp;&nbsp;Canada</option> 
    <option>&nbsp;&nbsp;United States</option> 
    <option>&nbsp;&nbsp;Mexico</option> 
</select> 

的jsfiddle出什麼問題是:jsFiddle

我試圖讓所以它替換當前<b>Location</b>: [some country] |<b>Location</b>: [some other country] |

+8

你爲什麼要用正則表達式來做這件事?爲什麼不給位置值一些'class'或'id'並直接替換內容? – Mathletics

+0

您的問題是\ /和\ s請參閱:http://stackoverflow.com/questions/16611956/javascript-regex-not-detecting/16612041 –

+1

無關的一面注意:您可能想看看[''' ](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup?redirectlocale=en-US&redirectslug=HTML%2FElement%2Foptgroup)。 – JJJ

回答

2

你不應該使用正則表達式這一點,但把你的目標變成的標記自己的名字:

<div id="search_filter"> 
    <b>Filter</b>: <b>Location</b>: 
    <span id="search_filter_location">Anywhere</span> 
     | <b>Player Slots</b>: >=0/>=0 
</div> 

,然後替換該標籤只喜歡裏面的內容:

function countryCheck(object) { 
    var filter = document.getElementById("search_filter_location"); 
    filter.innerHTML = object.value.replace("&nbsp;&nbsp;", ""); 
} 
0

如果你w螞蟻在你的字符串的開頭只更換使用^在你的正則表達式,它開始匹配的開始($比賽結束)

所以,你的代碼是:

function countryCheck(object) { 
    var filter = document.getElementById("search_filter"); 
    var re = new RegExp("<b>Location<\/b>:\s[a-zA-Z\s]+\s\|\s"); 
    filter.innerHTML = filter.innerHTML.replace(re, ("<b>Location</b>: " + object.value.replace(/^(\s){2}/, "") + " | ")); 
} 

編輯:如果要替換字符串處的兩個或更多空格處的空格,可以將其用作正則表達式:/^(\s){2,}/

0

當您通過RegExp構造函數和字符串創建正則表達式對象時,您必須使用反斜槓。這真是最好只使用本地語法:

var re = /<b>Location<\/b>:\s[a-zA-Z\s]+\s\|\s/; 

在你的代碼,因爲它認識到字符串常量的子表達式\s正在變成只是普通s由JavaScript標記生成器。

0

嘗試

function countryCheck(object) { 
    var filter = document.getElementById("search_filter"); 
    var re = /(<b>Location<\/b>:\s)([^|]+)(|)/; 
    filter.innerHTML = filter.innerHTML.replace(re, ("$1" + object.value.replace("&nbsp;&nbsp;", "") + " $3")); 
} 

演示:Fiddle