假设以下字符串:
hello world, h e l l o! hi. I am happy to see you!
有没有一种方法可以删除空格中的空白,比如这样?:
hello world, hello! hi. I am happy to see you!
我尝试了[^ ]+(s)
,但捕获组匹配所有空格。非常感谢。
一种正则表达式方法可能是:
var input = "hello world, h e l l o! hi. I am happy to see you!";
var output = input.replace(/(?<=bw)s+(?=wb)/g, "");
console.log(output);
以下是regex模式的解释,该模式针对位于两侧两个独立单词字符之间的空白:
(?<=bw) assert that what precedes is a single character
s+ match one or more whitespace characters
(?=wb) assert that what follows is a single character
由于您已经标记了pcre,另一个选项可能是:
(?:bwb|G(?!^))Kh(?=wb)
解释
(?:
交替|
的非捕获组bwb
在单词边界之间匹配单个单词字符|
或G(?!^)
在上一场比赛结束时确定位置,而不是在比赛开始时
)
关闭非捕获组Kh
忘记目前匹配的内容,只匹配一个水平空白字符(?=wb)
正向前瞻,断言一个单词char,后面跟一个单词边界到右边
Regex演示
在替换中使用空字符串。
另一个选项可以在一个单词字符序列中匹配至少2个字符,并在替换中删除空格。
请注意,s
也可以匹配换行符。
const regex = /bw(?: w)+b/g
const str = "hello world, h e l l o! hi. I am happy to see you!";
let res = str.replace(regex, m => m.replace(/ /g, ''));
console.log(res);