Javascript 用正则表达式删除中文单词之间的所有空格

Javascript 用正则表达式删除中文单词之间的所有空格,javascript,regex,Javascript,Regex,我只想删除中文文本中的所有空格 我的文本:”請 把 這 裡 的 10多 個 字 合 併. 你能帮我吗?“ 理想输出:”請把這裡的 10多個字合併. 你能帮我吗?“ 我已经学习过,但在我的情况下似乎不起作用,所以我把我的问题带到这里寻求帮助。使用@Brett Zamir soluce了解如何在正则表达式中匹配汉字 const str='1〕請 把 這 裡 的 10多 個 字 合 併. 你能帮我吗; (3)u4E00-\u9FCC\u3400-\U4B5\UFA00\UFA00\UFA00\u

我只想删除中文文本中的所有空格

我的文本:
”請 把 這 裡 的 10多 個 字 合 併. 你能帮我吗?“

理想输出:
”請把這裡的 10多個字合併. 你能帮我吗?“


我已经学习过,但在我的情况下似乎不起作用,所以我把我的问题带到这里寻求帮助。

使用@Brett Zamir soluce了解如何在正则表达式中匹配汉字


const str='1〕請 把 這 裡 的 10多 個 字 合 併. 你能帮我吗;
(3)u4E00-\u9FCC\u3400-\U4B5\UFA00\UFA00\UFA00\uFA11\uFA11\uFA11\uFA13\uFA11\uFA14\uFA14\uFA14\uFA14\uFA14\uFA13\uFA11\uFA11\uFA14\uFA14\uFA14\uFA14\uFA11\uFA14\uFA11\uFA11\uFA11\uFA11\uFA11\uFA11\uFA11\uFA11\uFA11\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\uFA21\UF\ udc00-\udc1d])([U40 0 0-\U40 0 0 0-\u9FCC\U40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-\U0 0 0 0 0 0 0 0 0 0-\U4 0 0 0 0 0 0 0 0 0 0-\U0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\uFA14\uFA14\uFA14\UF10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10\uFA14\uFA14\UF10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10","g",;
const ret=str.replace(正则表达式,$1$2');

console.log(ret);
汉字范围可以写成
[\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4E00-\u9FCC]
这样你就可以使用这个正则表达式来选择一个汉字和一个空格,并确保它后面有一个汉字作为前瞻
(?=[\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4DBF\u4E00-\u9FCC]+)

并将其替换为
$1

var-str='請 把把把把把 這 裡裡裡裡裡 的 10多多多多 個 字 合 併. 你能帮我吗;
console.log(str.replace(/([\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4E00-\u9FCC]+)\s+(?=[\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4E00-\u9FCC]+)/g,“$1”);
试试这个

str.replace(/ ([\u4E00-\u9FCC])|([ -~]+ )/g, '$1$2');
解决方案使用ascii字符和带有代码\u4E00-\u9FCC的中文字母(我从中获得它们-它包含大约20000个字符,足以满足日常使用,但不是所有中文字母)

var-str='請 把 這 裡 的 10多 個 字 合 併. 你能帮我吗;
str=str.replace(/([\u4E00-\u9FCC])|([-~]+)/g,'1$2');

console.log(str);
另一种解决方案使用带有中文字母代码的方法
/[\u3400-\u9FBF]/

删除中文字符之间空格的脚本
var chine='1〕請 把 這 裡 的 10多 個 字 合 併. 你能帮我吗;
//按空格分割文本
var spl=chine.trim().split(//\s+/);//输出spl=[”請","把","這",'裡','的','10','多','個'...];
var结果=“”;
对于(变量i=0;iconsole.log(结果);
获取中文字符匹配模式

使用,可以将匹配任何中文字符的
\p{Han}
Unicode属性类转换为

[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9\U00020000-\U0002A6D6\U0002A700-\U0002B734\U0002B740-\U0002B81D\U0002B820-\U0002CEA1\U0002CEB0-\U0002EBE0\U0002F800-\U0002FA1D]
在ES6中,要匹配单个中文字符,可以将其用作

/[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}]/u
使用将其传输到ES5,我们得到

使用JS
RegExp
匹配任何中文字符的模式

因此,您可以使用

s.replace(/([\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])\s+(?=(?:[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]))/g, '$1')

如果您的JS环境符合ECMAScript 2018,则可以使用较短的

s.replace(/(\p{Script=Hani})\s+(?=\p{Script=Hani})/gu, '$1')
图案细节

  • (中文字符模式)
    -捕获组1(替换模式中的
    $1
    ):任何中文字符
  • \s+
    -任意1+空格(任意Unicode空格)
  • (?=中文字符模式)
    -当前位置右侧必须有一个中文字符
JS演示版

var s=”請 把 這 裡 的 10多 個 字 合 併. 你能帮我吗;
英国货币政策局(以下以下任何人士)是一名政府官员,或是[[[[[[[[[[[[[[[[[[[UU2.80-\\UU2.80-[[[[[[U2.80-\\UUU2.80-\\U2.80-\\U2.80-[[[U2.UU2.80-\\U2.0 0 0 0 0 0 0 0 0 0 0 0 0 0.5\\5 5.5\\u3005 5 5 5 5 5 7 7 7 7 7 7\\U30 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 7 7\\U30 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7\\U30 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]| \\uD87E[\\uDC00-\\ud1d]”;

console.log(s.replace(新的RegExp(“(“+HanChr+”))\\s+(?=(?:“+HanChr+”)”、“g”)、“$1”);
这在您的场景中可能会很有用。
(?

您的空格实际上是
还是您只是猜测?
。使用最新的ECMAScript 2018正则表达式语法替换(///g),
,您可以使用
s.replace(
Info:这个问题的答案也回答了“如何在Javascript中匹配汉字”“。此处的输出与理想输出不匹配。请注意10前面的空格。您丢失了中文单词中心10之前的空格,但仍然找到了选择汉字的正确方法:p@GrégoryNEUT
blabla
在英语中并不常见,您可能希望改用
foo
)如果在其他文本之前有偶数个汉字,例如@BobbleBobble提到:
請 的 10多 個 a
。在这种情况下,它会删除太多的空格。你真的应该将其分解为更简单的子表达式。一些可怜的狗娘养的将不得不在8年内调试它。10前面的空格不见了。@holydragon它被修复了now@KamilKiełczewski不,不是。它仍然会删除另一个角色和Chi之间的空格汉字,不仅仅是两个汉字之间的空格。还有其他答案(还有你自己的)
/[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}]/u
(?:[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])
s.replace(/([\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])\s+(?=(?:[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]))/g, '$1')
s.replace(/(\p{Script=Hani})\s+(?=\p{Script=Hani})/gu, '$1')