2013-05-20 73 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