使用JavaScript正则表达式在元字符周围删除空格

5

试图在不删除非字母数字字符的情况下去除其周围的任何空格,例如/\s*(\W)\s*/g默认会去掉。

有没有办法只使用.replace()来定位空格?

例如:

var regex = "/\s*(\W)\s*/g";
var text = "Words  : \"  text docs\"";
var text = text.replace(regex , "");
console.log(text)

期望的文本:"Words:"text docs"

类似于Python中去除特殊字符和单词之间的空格,但需用JavaScript实现。


1
你的正则表达式有什么问题吗?(嗯,我会使用[^\w ]而不是\W,以避免匹配空格。) - Enlico
请添加您期望的文本。 - Aziz.G
2
你想在JavaScript中用第一组替换文本吗?例如 text.replace(/\s*(\W)\s*/g , "$1") ?? - Ritesh Khandekar
1
谢谢Ritesh,你的解决方案有效。 - Rnikolai
1个回答

2
请记住,\W 匹配任何非 ASCII 字母、数字或 _ 的“非单词”字符。在 JS 正则表达式中,\W 等同于 [^A-Za-z0-9_]。因此,它也匹配需要删除的空白字符。为了仅匹配非空格非单词字符,您需要用 [^\w\s] 模式替换 \W
因此,剩下的就是使用 替换反向引用 来替换匹配项,其中 Group 1 的值为 $1 在 JS 中。
text = text.replace(/\s*([^\w\s])\s*/g , "$1")

请看正则表达式演示链接 JS演示:

console.log("Some - text +=@!#$#$^%* here .        ".replace(/\s*([^\w\s])\s*/g , "$1"))


1
Enrico Maria De Angelis和Ritesh Khandekar在评论中提出了这两个修复建议,感谢您提供替换反向引用解释的链接。 - Rnikolai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接