可能在@之前的第一个字母的正则表达式
RegEx for first letters that MIGHT precede @
我正在寻找正则表达式来捕获 可能 是电子邮件地址的字符串的首字母。如果它是一个电子邮件地址,只是@之前单词的第一个字母。换句话说,单词的第一个字母后面可能有也可能没有@,如果有@,则忽略其后的文本。例如(捕获的粗体字母和前 3 个给出的解释):
- first.last(没有@时捕获f和l)
- f首先(捕获f)
- first.last@exampledomain.com(捕获f和l但遇到@时停止捕获)
- first@example.com
- first@sub.example.com
- first.midle.last@example.com
我目前使用的正则表达式是 /\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})?
我不知道你的捕获是如何工作的。也许这是 closer/useful.
^([A-Za-z])[^.@]*(?:[.]([A-Za-z])[^.@]*)*@
或者您可能只想将比赛限制在三场?
^([A-Za-z])[^.@]*(?:[.]([A-Za-z])[^.@]*)?(?:[.]([A-Za-z])[^.@]*)?@
我正在寻找正则表达式来捕获 可能 是电子邮件地址的字符串的首字母。如果它是一个电子邮件地址,只是@之前单词的第一个字母。换句话说,单词的第一个字母后面可能有也可能没有@,如果有@,则忽略其后的文本。例如(捕获的粗体字母和前 3 个给出的解释):
- first.last(没有@时捕获f和l)
- f首先(捕获f)
- first.last@exampledomain.com(捕获f和l但遇到@时停止捕获)
- first@example.com
- first@sub.example.com
- first.midle.last@example.com
我目前使用的正则表达式是 /\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})?
我不知道你的捕获是如何工作的。也许这是 closer/useful.
^([A-Za-z])[^.@]*(?:[.]([A-Za-z])[^.@]*)*@
或者您可能只想将比赛限制在三场?
^([A-Za-z])[^.@]*(?:[.]([A-Za-z])[^.@]*)?(?:[.]([A-Za-z])[^.@]*)?@