Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式Javascript替换?_Javascript_Regex_Replace - Fatal编程技术网

正则表达式Javascript替换?

正则表达式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

我正在尝试制作一个过滤器,它有很多选项列在过滤器框的顶部,现在,我正在尝试添加国家,我决定使用regex。但我不能让它工作,由于某种原因,它在字符串的中间代替了开始。

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;", "") + " | "));
}
功能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>&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>
过滤器:位置:任意位置|播放器插槽:>=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("&nbsp;&nbsp;", "");
}
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"));
}