我想在任何字母(而不是数字)中匹配\s字符:

'abc def ghi'

应该匹配cdfg之间的空白。

我认为我应该使用正向后视,但据我所知,它在js中不可行。有什么办法吗?

最佳答案

使用此代码:

var s = "abc def ghi 3rt";
s = s.replace(/(^|.)(\s+)(?!\d)/g, function (m, grp1, grp2, offset, input) {
      return (grp1.length !== 0 && !((grp1.charCodeAt(0) > 47) && (grp1.charCodeAt(0) <  58))) ? grp1 + "<span>" + grp2 + "</span>" : grp1 + grp2;
});
alert(s);


使用(^|.)(\s+)(?!\d),我们匹配在字符串开头或某个字符之后的任何空格(\s+),这些空格将与(grp1.charCodeAt(0) > 47) && (grp1.charCodeAt(0) < 58)检查数字等效性。 (?!\d)确保我们只匹配那些没有数字的空格。

更新

如果您的字面意思是要匹配英文字母之间的空格,请使用

var s = "abc def ghi 3rt";
s = s.replace(/(^|[a-z])(\s+)(?=[a-z])/ig, "$1<span>$2</span>");
document.write(s.replace(/</g,"&lt;").replace(/>/g,"&gt;"));

08-16 15:56