Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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 使用全局RegExp和String.prototype.replace删除所有引用_Javascript_Regex_String - Fatal编程技术网

Javascript 使用全局RegExp和String.prototype.replace删除所有引用

Javascript 使用全局RegExp和String.prototype.replace删除所有引用,javascript,regex,string,Javascript,Regex,String,功能条(匹配、前、后){ 在“”之前和之后返回(&F):“” } var regex=/(^ |\s)(?:y | x)(\s |$)/g 变量str=('x1y2x3y')。替换(正则表达式,strip) console.log(str) str=('xy2x3y')。替换(正则表达式,strip) console.log(str)我用另一种不使用trim()的方法解决了这个问题: ('x1y2x3y4x')。替换(/(^ |\s?(:y | x)(\s?|$)/g,条带) 功能条(匹配、前

功能条(匹配、前、后){
在“”之前和之后返回(&F):“”
}
var regex=/(^ |\s)(?:y | x)(\s |$)/g
变量str=('x1y2x3y')。替换(正则表达式,strip)
console.log(str)
str=('xy2x3y')。替换(正则表达式,strip)

console.log(str)
我用另一种不使用trim()的方法解决了这个问题:

('x1y2x3y4x')。替换(/(^ |\s?(:y | x)(\s?|$)/g,条带)

功能条(匹配、前、后){
在“”之前和之后返回(&F):“”
}
console.log(“带1:,('x1y2x3y4x')。替换(/(^ |\s?(:y | x)(\s?|$)/g,带))

console.log(“With 1:,('x y 2 x 3 y 4 x')。replace(/(^ |\s?(:y | x)(\s?$)/g,strip))
不能两次匹配同一个字符(匹配结束时的空格字符,当子字符串连续时,不能在下一次匹配开始时再匹配一次)

避免这种情况的一种可能的方法是将
(|$)
更改为一种前瞻性方法,该方法在不占用空间的情况下检查空间。但您也需要改变方法,因为您必须在末尾或开头修剪最终剩余的空间:

var regex = /(^|\s)(?:y|x)(?!\S)/g;
var str = 'x y 2 x 3 y'.replace(regex, '').trim();
(?!\S)
表示:不后跟非空白字符(如果位置后跟空格或字符串结尾,则该操作成功)


其他方法:可以匹配所有连续的x和y

function strip(match, before, after) {
    return before && after ? ' ' : ''
}

var regex = /(^|\s)(?:y|x)(?:\s(?:y|x))*(\s|$)/g;

var str = 'x y 2 x 3 y'.replace(regex, strip);

拆分字符串:

var str = 'x y 2 x 3 y'.split(/\s+/).filter(a => !['x', 'y'].includes(a)).join(' ');

我已经用3个替换语句完成了:

('xy2x3y4x')。替换(/\b[xy]\b/g,”)。替换(/\b\s\s+\b/g,”)。替换(/^\s+\s+$/g,”)


编辑:最后一个可以替换为
.trim()

,它将匹配包含“x”或“y”的单词,而不是仅包含“x”或“y”。您在帖子中没有指定。抱歉,我澄清了问题中的要求。完美的答案,谢谢!下面是一个比较三者的jsPerf: