正则表达式Javascript替换?
我正在尝试制作一个过滤器,它有很多选项列在过滤器框的顶部,现在,我正在尝试添加国家,我决定使用regex。但我不能让它工作,由于某种原因,它在字符串的中间代替了开始。 JS代码:正则表达式Javascript替换?,javascript,regex,replace,Javascript,Regex,Replace,我正在尝试制作一个过滤器,它有很多选项列在过滤器框的顶部,现在,我正在尝试添加国家,我决定使用regex。但我不能让它工作,由于某种原因,它在字符串的中间代替了开始。 JS代码: function countryCheck(object) { var filter = document.getElementById("search_filter"); var re = new RegExp("<b>Location<\/b>:\s[a-zA-Z\s]+\s
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(" ", "") + " | "));
}
功能countryCheck(对象){
var filter=document.getElementById(“搜索过滤器”);
var re=new RegExp(“位置:\s[a-zA-Z\s]+\s\|\s”);
filter.innerHTML=filter.innerHTML.replace(re,(“位置:“+object.value.replace”(“,”)+“|”);
}
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> Sweden</option>
<option> Germany</option>
<option> United Kingdom</option>
<option> France</option>
<option>North America</option>
<option> Canada</option>
<option> United States</option>
<option> Mexico</option>
</select>
过滤器:位置:任意位置|播放器插槽:>=0/>=0
在任何地方
欧洲
瑞典
德国
大不列颠联合王国
法国
北美
加拿大
美国
墨西哥
显示问题所在的JSFIDLE:
我正试图让它将当前的
位置:[some country]|
替换为位置:[some other country]|
如果您想替换字符串的开头,只需在正则表达式的开头使用^
,它匹配开头($
匹配结尾)
所以你的代码应该是:
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}/, "") + " | "));
}
功能countryCheck(对象){
var filter=document.getElementById(“搜索过滤器”);
var re=new RegExp(“位置:\s[a-zA-Z\s]+\s\|\s”);
filter.innerHTML=filter.innerHTML.replace(re,(“位置:“+object.value.replace(/^(\s){2}/,”)+“|”);
}
编辑:如果要替换字符串上有2个或更多空格的任何空格,可以将其用作正则表达式:
/^(\s){2,}/
当通过RegExp构造函数和字符串创建正则表达式对象时,必须将反斜杠加倍。最好只使用本机语法:
var re = /<b>Location<\/b>:\s[a-zA-Z\s]+\s\|\s/;
var re=/Location:\s[a-zA-Z\s]+\s\|\s/;
在您的代码中,JavaScript标记器将
\s
子表达式转换为纯s
,因为它识别字符串常量。您不应为此使用正则表达式,而应将您的目标放入其自身的标记中,如:
<div id="search_filter">
<b>Filter</b>: <b>Location</b>:
<span id="search_filter_location">Anywhere</span>
| <b>Player Slots</b>: >=0/>=0
</div>
试一试
功能countryCheck(对象){
var filter=document.getElementById(“搜索过滤器”);
var re=/(位置:\s)([^ |]+)(|)/;
filter.innerHTML=filter.innerHTML.replace(re,(“$1”+object.value.replace(“,”)+“$3”);
}
演示:为什么要用正则表达式执行此操作?为什么不给位置值一些
class
或id
并直接替换内容呢?您的问题在于\/和\s请参见:不相关的侧注:您可能想查看一下。不知道optgroup,但我仍然希望用户能够选择“Europe”。
function countryCheck(object) {
var filter = document.getElementById("search_filter_location");
filter.innerHTML = object.value.replace(" ", "");
}
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(" ", "") + " $3"));
}