向正则表达式添加条件

时间:2014-03-04 07:35:31

标签: javascript regex string replace

鉴于下面的Javascript,如何在条款中添加条件?我想在分隔符之后添加一个“空格”字符,仅当空格不存在时。如果spatialText中已存在空格字符,则当前代码将产生双空格。

var separators = ['.', ',', '?', '!'];
for (var i = 0; i < separators.length; i++) { 
      var rg = new RegExp("\\" + separators[i], "g"); 
      spacedText = spacedText.replace(rg, separators[i] + " "); 
}

5 个答案:

答案 0 :(得分:2)

'. , ? ! .,?!foo'.replace(/([.,?!])(?! )/g, '$1 ');
//-> ". , ? ! . , ? ! foo"

表示替换。,?之一的每个出现!然后没有自己的空间和之后的空间。

答案 1 :(得分:2)

我建议使用以下正则表达式来解决您的问题:

"Test!Test! Test.Test 1,2,3,4 test".replace(/([!,.?])(?!\s)/g, "$1 ");
// "Test! Test! Test. Test 1, 2, 3, 4 test"

正则表达式匹配字符类[!,.?]中的任何字符,后面没有空格(?!\s)。字符类周围的括号表示匹配的分隔符将包含在替换字符串中使用的第一个反向引用$1中。有关工作示例,请参阅此fiddle

答案 2 :(得分:0)

您可以替换所有上述字符,包括空格。通过这种方式,您将捕获任何标点符号及其尾随空格,并将其替换为单个空格。

"H1a!. A ?. ".replace(/[.,?! ]+/g, " ")

[.,?! ]是一个chararcter类。它将与.,?!匹配,并且+至少匹配一次(但如果可能的话,多次)。

答案 3 :(得分:0)

这是一个有效的代码:

var nonSpaced= 'Hello World!Which is your favorite number? 10,20,25,30 or other.answer fast.';
var spaced;
var patt = /\b([!\.,\?])+\b/g;

spaced = nonSpaced.replace(patt, '$1 ');

如果您console.log spaced的值,它将是:Hello World! Which is your favorite number? 10, 20, 25, 30 or other. answer fast.请注意?符号后的空格字符数,它只有一个,并且在full-stop之后不是额外的空格。

答案 4 :(得分:0)

spacedText = spacedText.replace(/([\.,!\?])([^\s])/g,"$1 ")

这意味着:使用第一组和空格([\.,!\?])中的匹配替换其中一个字符([^\s]),后跟非空白字符("$1 ")。 / p>