从间隔的单词中删除空格?
Remove whitespace from spaced-out word?
假设以下字符串:
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(/(?<=\b\w)\s+(?=\w\b)/g, "");
console.log(output);
这里是对正则表达式模式的解释,它针对位于两侧两个独立的单个单词字符之间的空白:
(?<=\b\w) assert that what precedes is a single character
\s+ match one or more whitespace characters
(?=\w\b) assert that what follows is a single character
由于您已标记 pcre,另一个选项可能是:
(?:\b\w\b|\G(?!^))\K\h(?=\w\b)
说明
(?:
交替的非捕获组 |
\b\w\b
匹配单词边界之间的单个单词字符
|
或
\G(?!^)
断言上一场比赛结束时的位置,而不是开始
)
关闭非捕获组
\K\h
忘记到目前为止匹配的是什么,匹配单个水平白色space 字符
(?=\w\b)
正面前瞻,断言单个单词 char 后跟右侧的单词边界
在替换中使用空字符串。
另一个选项可能是在单个单词字符序列中匹配至少 2 个字符,并在替换中删除 space.
请注意 \s
也可以匹配换行符。
const regex = /\b\w(?: \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);
假设以下字符串:
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(/(?<=\b\w)\s+(?=\w\b)/g, "");
console.log(output);
这里是对正则表达式模式的解释,它针对位于两侧两个独立的单个单词字符之间的空白:
(?<=\b\w) assert that what precedes is a single character
\s+ match one or more whitespace characters
(?=\w\b) assert that what follows is a single character
由于您已标记 pcre,另一个选项可能是:
(?:\b\w\b|\G(?!^))\K\h(?=\w\b)
说明
(?:
交替的非捕获组|
\b\w\b
匹配单词边界之间的单个单词字符|
或\G(?!^)
断言上一场比赛结束时的位置,而不是开始
)
关闭非捕获组\K\h
忘记到目前为止匹配的是什么,匹配单个水平白色space 字符(?=\w\b)
正面前瞻,断言单个单词 char 后跟右侧的单词边界
在替换中使用空字符串。
另一个选项可能是在单个单词字符序列中匹配至少 2 个字符,并在替换中删除 space.
请注意 \s
也可以匹配换行符。
const regex = /\b\w(?: \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);