正则表达式大写不包含单引号

时间:2017-03-07 22:54:06

标签: regex node.js

public Player() {}

如果我有这样的字符串,如果没有单引号包围,我想把它全部大写。

hello 'this' is my'str'ing => hello 'this' is my'str'ing

我是否有一种简单的方法可以在节点中使用正则表达式来实现这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式:

'[^']+'|(\w)

这是一个实例:

var subject = "hello 'this' is my'str'ing";
var regex = /'[^']+'|(\w)/g;
replaced = subject.replace(regex, function(m, group1) {
    if (!group1) {
        return m;
    }
    else {
        return m.toUpperCase();
    }
});

document.write(replaced);

这个答案归功于zx81。有关详细信息,请参阅zx81的{​​{3}}。

答案 1 :(得分:0)

由于Javascript不支持lookbehinds,我们必须使用\B来匹配字边界不匹配的任何内容。

在这种情况下,\B'确保'不在\w[a-zA-Z0-9_])中的任何内容的右侧。同样,'\B会在左侧执行类似的检查。

(?:(.*?)(?=\B'.*?'\B)(?:(\B'.*?'\B))|(.*?)$)regex demo

使用回调函数并检查捕获1或3的长度是否> 0如果是,则在匹配

上返回一个大写字母

**该示例使用\U\L只是为了大写和小写相关匹配。你的回调不一定会影响$2的情况,所以“亚当”可以留下“亚当”等等。

无关,但是对任何可能正在尝试反向执行此操作的人发送一条说明。反之亦然:

(\B'.+?'\B) regex demo