JavaScript/jQuery如何去除标点前的空格

4
我想在Javascript/jquery中删除每个标点符号前的空格。例如:
Input string = " This 's a test string ."

Output = "This's a test string."

3
我想要一只小猫。你有什么问题吗?你尝试过什么吗?它有效吗? - Scott Sauyet
https://dev59.com/e2855IYBdhLWcg3weEGJ - rajesh kakawat
你所说的标点符号是什么意思?你的例子展示了“从字符串开头和结尾去除空格”。可以使用.trim()函数来实现。 - Nandakumar
是的,我已经访问了Rajesh分享的链接。我只想知道JavaScript / jQuery的解决方案。 - Venkat
我希望 trim 函数不会删除单词或特殊字符之间的空格。 - Venkat
7个回答

6
"This string has some -- perhaps too much -- punctuation that 's not properly "
+ "spaced ; what can I do to remove the excess spaces before it ?"
.replace(/\s+(\W)/g, "$1");

//=> "This string has some-- perhaps too much-- punctuation that's not properly "
//   + "spaced; what can I do to remove the excess spaces before it?"

1
\s+(\W) 也会移除换行符。使用 / +(\W)/g 只取出空格。 - Marco Lackovic
2
请注意,这也会作用于括号(例如 ( { [)),这可能不是您想要的。 - Gleno
这也适用于英语以外的其他语言,因为\W表示[^A-z][^0-9]。 - user18430658

3
使用String.replace函数与一个正则表达式匹配所有空格符号,并匹配您想要匹配的所有标点符号之前的任何数量:
var regex = /\s+([.,!":])/g;

var output = "This 's a test string .".replace(regex, '$1');

可能更容易的方法是 str.replace(/\s+(\W)/g, "$1");。不要尝试列出您想要定位的字符的白名单,只需使用除单词字符以外的任何字符即可。 - Scott Sauyet
@ScottSauyet 更简单,但可能不完全符合他们的要求。例如,在开括号之前删除空格我看不出有什么理由。 - Anthony Grist
嗯,你的列表中缺少连字符、括号、问号、分号和其他标点符号。对我来说,标点符号就是所有非空格、非单词字符。但是楼主似乎不太感兴趣... - Scott Sauyet
Anthony Grist,你的回答和Scoot Sauyet的类似,但包含了特定的字符列表。 - Venkat
这对我的情况很有用,因为我有时在“P”标签中使用正则表达式,有些HTML文本如 - "this's test <span class='heiligh'>cliclk here,/span> paragarph"。Scott Sauyet的解决方案可能不适用,因为该解决方案会删除span之前的空格,输出HTML如 - "this's testcliclk here paragarph"。我为您的解决方案添加了+1。 - Venkat

0

尝试替换。

var test = "This's a test string";
test = test.replace(" 's", "'s");
OutPut = test;

但是@suchithra他要求在它们之间去掉空格。并不是完全删除“'s”。 - GautamD31

0
var str= "This 's a test string ."

var regex = /\s\'/i;

var output =str.replace(regex, "'");

0
如果您想从字符串中删除特定的标点符号,最好明确地删除您想要的内容,例如:
   replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,"")

做以上操作仍然无法返回您指定的字符串。如果您想要删除因删除疯狂标点符号而导致的多余空格,那么您需要像这样进行操作:
 replace(/\s{2,}/g," ");

我的完整示例:

  var s = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
    var punctuationless = s.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,"");
 var finalString = punctuationless.replace(/\s{2,}/g," ");

0
如果您想使用正则表达式,则需要匹配以下内容:
/\s\./

并将其替换为一个点。


-1
尝试像分割一样
var my_arr = [];
my_arr = my_str.split("'");
var output = $.trim(my_arr[0]) + "'" + $.trim(my_arr[1]);
alert(output);

看看这个FIDDLE。但首先,试一下。


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