可能在@之前的第一个字母的正则表达式

RegEx for first letters that MIGHT precede @

我正在寻找正则表达式来捕获 可能 是电子邮件地址的字符串的首字母。如果它是一个电子邮件地址,只是@之前单词的第一个字母。换句话说,单词的第一个字母后面可能有也可能没有@,如果有@,则忽略其后的文本。例如(捕获的粗体字母和前 3 个给出的解释):

我目前使用的正则表达式是 /\b[a-z](?=.*@)/g,但只有存在 @ 时才有效。

作为背景,我正在尝试将电子邮件地址中使用的姓名的首字母大写。 @ 之后的任何内容都应保持原样。这就是为什么我真的只需要在单词的开头捕获小写字母。我正在使用与 javascript.

使用相同约定的 actionscript

解决方案:

由于 actionscript 不支持 lookbehind,我最终使用此代码 return 带有正则表达式大写结果的字符串:

var pattern:RegExp;
if(string.indexOf("@") == -1) {
    // no @ in string, so just find first letters of words
    pattern = /\b[a-z]/g;
} else {
    // @ exists so just find first letters of words before @
    pattern = /\b[a-z](?=.*@)/g;
}
// return the string, capitalizing the results of the regex
return string.replace( pattern, function():String { return String(arguments[0]).toUpperCase(); } );

我认为您执行此操作的最佳方法是进行 2 次搜索:

第一个是捕获 @ 字符之前的所有内容:

[^@]+

然后搜索该列表以捕获所有第一个字母:

\b[a-z]

我当然不知道你是如何实际实现这些的(发布一些真实的代码可能会帮助我帮助你,仅供参考)但这似乎是最好的选择。

如果您使用任何其他引擎,我会建议:

(?<!.*@.*)\b[a-z]

它使用了lookbehinds,可惜,JS没有lookbehinds。

也许这对你有帮助。

^([a-zA-Z]{1})[a-zA-Z0-9]+\.?([a-zA-Z]{1})?

https://regex101.com/r/eL3dK4/1

我不知道你的捕获是如何工作的。也许这是 closer/useful.

^([A-Za-z])[^.@]*(?:[.]([A-Za-z])[^.@]*)*@

或者您可能只想将比赛限制在三场?

^([A-Za-z])[^.@]*(?:[.]([A-Za-z])[^.@]*)?(?:[.]([A-Za-z])[^.@]*)?@

https://regex101.com/r/eL3dK4/1#javascript