Javascript 向正则表达式添加条件

Javascript 向正则表达式添加条件,javascript,regex,string,replace,Javascript,Regex,String,Replace,考虑到下面的Javascript,如何向子句添加条件?仅当空格不存在时,我想在分隔符后添加一个“空格”字符。如果spacedText中已存在空格字符,则当前代码将产生双空格 var separators = ['.', ',', '?', '!']; for (var i = 0; i < separators.length; i++) { var rg = new RegExp("\\" + separators[i], "g"); spacedText =

考虑到下面的Javascript,如何向子句添加条件?仅当空格不存在时,我想在分隔符后添加一个“空格”字符。如果spacedText中已存在空格字符,则当前代码将产生双空格

var separators = ['.', ',', '?', '!'];
for (var i = 0; i < separators.length; i++) { 
      var rg = new RegExp("\\" + separators[i], "g"); 
      spacedText = spacedText.replace(rg, separators[i] + " "); 
}
var分隔符=['.','.','.','?','!'];
对于(var i=0;i
您可以替换上述所有字符,包括空格。这样,您将捕获任何标点符号及其尾随空格,并用单个空格替换它们

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

[,?!]
是一个字符类。它将匹配
和+使其至少匹配一次(但如果可能多次)。

您可以替换上述所有字符,包括空格。这样,您将捕获任何标点符号及其尾随空格,并用单个空格替换它们

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

[,?!]
是一个字符类。它将匹配
和+使其至少匹配一次(但如果可能多次)。

以下是一个工作代码:

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
间隔
的值,它将是:
Hello World!你最喜欢哪个号码?10、20、25、30或其他。快速回答。
注意
符号后的空格字符数。
符号只有一个,最后一个
句号后没有多余的空格

下面是一个工作代码:

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
间隔
的值,它将是:
Hello World!你最喜欢哪个号码?10、20、25、30或其他。快速回答。
注意
符号后的空格字符数。
符号只有一个,最后一个
句号后没有多余的空格

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


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

spacedText=spacedText。替换(/([\,!\?)([^\s])/g,“$1”)

这意味着:将这些字符(
[\,!\?]
)中的一个替换为非空白字符(
[^\s]
),后跟来自第一组的匹配项和空格(
“$1”

意味着替换每一个出现的。,?!它后面不是一个本身的空间,后面是一个空间


意味着替换每一个出现的。,?!后面不是一个空格,后面是一个空格。

我建议使用以下regexp来解决您的问题:

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

regexp匹配字符类
[!,.?]
中的任何字符,后面不跟空格
(?!\s)
。字符类周围的括号表示匹配的分隔符将包含在替换字符串中使用的第一个backreference
$1
中。请参见此示例。

我建议使用以下regexp来解决您的问题:

"Test!Test! Test.Test 1,2,3,4 test".replace(/([!,.?])(?!\s)/g, "$1 ");
// "Test! Test! Test. Test 1, 2, 3, 4 test"
regexp匹配字符类
[!,.?]
中的任何字符,后面不跟空格
(?!\s)
。字符类周围的括号表示匹配的分隔符将包含在替换字符串中使用的第一个backreference
$1
中。参见下面的工作示例