我想在任何字母(而不是数字)中匹配\s
字符:
'abc def ghi'
应该匹配
c
和d
和f
和g
之间的空白。我认为我应该使用正向后视,但据我所知,它在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,"<").replace(/>/g,">"));