具有特殊字符和空格的Javascript正则表达式

具有特殊字符和空格的Javascript正则表达式,javascript,regex,Javascript,Regex,通过使用Javascript,我想转换文本 " [a] b [c]" 到 我的代码如下: var test = " [a] b [c]"; test.replace(/\s+\[/g, "["); alert(test); 然而,结果是 "[a] b [c]" 我想知道为什么?有什么想法吗 谢谢 字符串是不可变的。所以replace不会更改测试,而是返回一个更改的字符串。因此,您需要指定结果: test = test.replace(/\s+\[/g, "[");

通过使用Javascript,我想转换文本

"  [a] b    [c]" 

我的代码如下:

var test = "  [a] b    [c]";
test.replace(/\s+\[/g, "[");
alert(test);
然而,结果是

"[a] b    [c]"
我想知道为什么?有什么想法吗

谢谢

字符串是不可变的。所以replace不会更改测试,而是返回一个更改的字符串。因此,您需要指定结果:

test = test.replace(/\s+\[/g, "[");
请注意,这将导致[a]b[c]。要获得实际结果,您可能需要使用:

test = test.replace(/(^|\s)\s*\[/g, "$1[");
如果第一个空格字符不在字符串的开头,则确保将其写回

或者,先使用trim,然后手动回写一个空格:

test = test.trim().replace(/\s+\[/g, " [");
字符串是不可变的。所以replace不会更改测试,而是返回一个更改的字符串。因此,您需要指定结果:

test = test.replace(/\s+\[/g, "[");
请注意,这将导致[a]b[c]。要获得实际结果,您可能需要使用:

test = test.replace(/(^|\s)\s*\[/g, "$1[");
如果第一个空格字符不在字符串的开头,则确保将其写回

或者,先使用trim,然后手动回写一个空格:

test = test.trim().replace(/\s+\[/g, " [");
修剪

如果浏览器支持,也可以使用

test = test.trim();
注意:如果您需要支持不提供str.trim的浏览器,则始终可以使用

紧空间到一

test = test.replace(/\s+/g, " ");
一艘班轮

test = test.trim().replace(/\s+/g, " ");
几个测试

var cleanString = function(str) {
  console.log(str.trim().replace(/\s+/g, " "));
};

var examples = [
  "    [a]  b     [c]      ",
  " [a]    [b]    [c]   [d]",
  "[a]       b [c]         ",
  "              [a] b [c] "
];

examples.map(cleanString);
输出

[a] b[c] [a] [乙][丙][丁] [a] b[c] [a] b[c] 修剪

如果浏览器支持,也可以使用

test = test.trim();
注意:如果您需要支持不提供str.trim的浏览器,则始终可以使用

紧空间到一

test = test.replace(/\s+/g, " ");
一艘班轮

test = test.trim().replace(/\s+/g, " ");
几个测试

var cleanString = function(str) {
  console.log(str.trim().replace(/\s+/g, " "));
};

var examples = [
  "    [a]  b     [c]      ",
  " [a]    [b]    [c]   [d]",
  "[a]       b [c]         ",
  "              [a] b [c] "
];

examples.map(cleanString);
输出

[a] b[c] [a] [乙][丙][丁] [a] b[c] [a] b[c]

@raina77ow通过点击编辑来检查源代码。我不知道为什么堆栈溢出会覆盖我的帖子。我的结果是[a]b[c]@SantiagoMunez这是HTML,HTML!多个空间=1个空间!啊!谢谢知道为什么吗?我认为问题出在我的regex>上。另外,请使用console.log而不是依赖警报。@raina77ow单击“编辑”检查源代码。我不知道为什么堆栈溢出会覆盖我的帖子。我的结果是[a]b[c]@SantiagoMunez这是HTML,HTML!多个空间=1个空间!啊!谢谢知道为什么吗?我认为问题出在我的regex>上。另外,请使用console.log而不是依赖警报。是的,但现在我想知道为什么OP示例中的字符串会发生变化@raina77ow,因为如果在allArgh渲染,他没有看到警告框中的前导空格,但是当然@SantiagoMunez-养成使用console.log而不是alert调试东西的习惯。谢谢它起作用了。顺便说一句,你介意解释一下这个表达吗?test=test.replace/^ |\s\s*[/g,$1[;为什么我的表达式\s+不足以实现我想要的目标?为什么要费心匹配[是吗?是的,但现在我想知道为什么OP示例中的字符串会改变。@raina77ow,因为如果在allArgh渲染,他看不到警报框中的前导空格,但是当然了。@SantiagoMunez-养成习惯,使用console.log而不是alert来调试东西。谢谢!它很有效。顺便说一句,您介意解释一下表达式吗?test=test.replace/^ |\s\s*[/g,$1[;为什么我的表达式\s+不足以实现我想要的目标?为什么你要费心匹配[完全不匹配?谢谢Naomik。你的解决方案也有效!谢谢Naomik。你的解决方案也有效!