正则表达式 - 在单个字母后替换除空格之外的所有空格

时间:2018-06-11 09:07:26

标签: javascript regex

在JavaScript中我想用百分比(%)替换所有与以下正则表达式不匹配的空格:

\b[a-zA-Z]\s\b

我尝试排除位于单个字符旁边的所有空格并替换所有其他空格。如果:

  

确实,A B C学校非常适合孩子,C D E School不是

A-B和B-C和C-S之间除了这些空间之外的所有空间都应该用百分比替换。结果是:

  

%A%A B C学校%%%%%%和%C D E学校%%是%

我看了:

  1. Regex negative match query
  2. Replace part of string that doesn't match regex
  3. 但它没有给我最终答案。

    目前query.replace(\b[a-zA-Z]\s\b,'%')完全取代了应该保留的空格。

    你能否告诉我如何以正确的方式否定我的表达?

5 个答案:

答案 0 :(得分:1)

匹配并捕获您拥有的模式,并匹配其他上下文中的任何其他空格:

var s = "True that A B C School is great for kids and C D E School is not";
var rx = /\b([a-zA-Z]\s)\b|\s/g;
console.log(
  s.replace(rx, function($0,$1) { return $1 ? $1 : "%"; })
  // ES6+ syntax
  // s.replace(rx, ($0,$1) => $1 ? $1 : "%" )
);
// => True%that%A B C School%is%great%for%kids%and%C D E School%is%not

<强>详情

  • \b([a-zA-Z]\s)\b - 一个单词边界,然后是任何ASCII字母和一个空格(捕获到第1组),后跟一个单词边界
  • | - 或
  • \s - 1个空白字符

在匿名方法(或箭头方法)中,$0代表整个匹配,$1代表捕获的文本(组1值)。如果组1匹配,我们只返回它的值(因此,保留1个字母单词后的空格)。否则,匹配的空格将替换为%

答案 1 :(得分:0)

没有必要否定任何表达,你可以匹配&#34;两个或多个字符后跟一个空格&#34;

替换

([a-zA-Z]{2,})\s

通过

$1

答案 2 :(得分:0)

尝试

&#13;
&#13;
console.log("[foo bar foobar   barfoo b f f b ]".replace(/([a-z]{2,})(\s+)/gi, "$1#"));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

检查一下。希望能帮助到你。它的作用是首先在空格之前找到至少需要2个字母的匹配,然后用管道替换它&#39; |&#39;。只需将其更改为您想要的任何内容。如果您有更多条件要添加

,可以使用此作为基础并从此处展开

&#13;
&#13;
var myString = 'A B C School is great for kids';
    
var result = myString.replace(/\w{2}\s/gi, match => match.replace(' ', '|'))

document.writeln(result)
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以匹配:

  • 非单词边界\S后跟非空白字符^;或
  • 字符串\s+
  • 的开头

使用正则表达式跟随一个或多个空白字符/(\B\S|^)\s+/g

var regex = /(\B\S|^)\s+/g;

var tests = [
  " ",
  " A B C Test DE",
  "True that A B C School is great for kids and C D E School is not"
];

for ( var i = 0; i < tests.length; i++ )
{
  console.log( `"${tests[i]}" -> "${tests[i].replace( regex, '$1%' )}"` );
}

例如:

&#13;
&#13;
{{1}}
&#13;
&#13;
&#13;