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: