在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学校%%是%
我看了:
但它没有给我最终答案。
目前query.replace(\b[a-zA-Z]\s\b,'%')
完全取代了应该保留的空格。
你能否告诉我如何以正确的方式否定我的表达?
答案 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)
尝试
console.log("[foo bar foobar barfoo b f f b ]".replace(/([a-z]{2,})(\s+)/gi, "$1#"));
&#13;
答案 3 :(得分:0)
检查一下。希望能帮助到你。它的作用是首先在空格之前找到至少需要2个字母的匹配,然后用管道替换它&#39; |&#39;。只需将其更改为您想要的任何内容。如果您有更多条件要添加
,可以使用此作为基础并从此处展开
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;
答案 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%' )}"` );
}
例如:
{{1}}&#13;