我认为您错误地使用'\b'
与空格匹配,但在 JavaScript 正则表达式'\b'
中匹配单词的开头或结尾。
因此这/([\w]+)\b/
部分正则表达式只匹配到 word 的结尾'last'
。剩下的字符串是' first'
(注意开头的空格)。
然后与您需要的余数相匹配([\w ]+)
,这将转换为“一个或多个出现的任何单词字符或空格字符”。这正是我们需要与剩余字符串匹配的内容' first'
。
您可以注意到,即使交换了单词,单词之前也有一个空格'first'
。
为了进一步证明这一点:假设您将输入更改为:
var toswop = 'last first another\nlast first another\nlast first another';
你可以看到你交换的文本变成了
first another last
first another last
first another last
这是因为正则表达式的最后一段([\w ]+)
一直与空格和单词字符匹配,并将单词“另一个”包含在匹配中。
但是,如果您从方括号中删除空格,那么它将与其余部分不匹配' first'
,因为它不是 'word character' 的字符串,而是'space' + string of 'word character'。
这就是为什么你的空间在这里很重要。
但是如果你像这样改变你的正则表达式:
swapped = toswop.replace(/([\w]+)\s([\w]+)/g,'$2 $1');
然后它在没有空格的情况下工作,因为\s
中间与两个单词中间的空格匹配。
希望这能澄清你的问题。
请参阅此处了解 JavaScript RegEx 语法:http ://www.w3schools.com/jsref/jsref_regexp_begin.asp
如果您想进行更多实验,请参阅我的小提琴:http: //jsfiddle.net/BuddhiP/P5Jqm/