Javascript 正则表达式要特别匹配@first.last格式,前后无任何内容
我有一个字符串,格式为Javascript 正则表达式要特别匹配@first.last格式,前后无任何内容,javascript,regex,Javascript,Regex,我有一个字符串,格式为一些单词@first.last更多单词@first.last。我想编写一个正则表达式来选择格式为@first.last的任何子字符串,这样我就可以用其他内容替换该子字符串。这个正则表达式应该只考虑 @第一个。最后< /COD>子串,忽略在 @ 符号之前的任何字符,或在代码>最后代码>第一空间之后的任何东西,包括该空间。例: regex = new RegExp(/[^\[\s](@[a-zA-Z0-9\.\-]+)/im); str = 'Hey @first.last t
一些单词@first.last更多单词@first.last
。我想编写一个正则表达式来选择格式为@first.last
的任何子字符串,这样我就可以用其他内容替换该子字符串。这个正则表达式应该只考虑<代码> @第一个。最后< /COD>子串,忽略在<代码> @ <代码>符号之前的任何字符,或在代码>最后<空间>代码>第一空间之后的任何东西,包括该空间。例:
regex = new RegExp(/[^\[\s](@[a-zA-Z0-9\.\-]+)/im);
str = 'Hey @first.last tell [@first.last] to check this out';
str = str.replace(regex, 'Keanu');
/** str: 'Hey Keanu tell [@first.last] to check this out? **?
我尝试过的正则表达式:
->将为我提供部分帮助,但不会删除(@[a-zA-Z0-9\.\-]+)
符号前面的字符@
->如果[^\[](@[a-zA-Z0-9\.\-]+)
是字符串的第一个子字符串,则此正则表达式将失败,即@first.last
不会被str.replace调用更改@first.last查看此
->尝试过滤前导空格[^\[\s](@[a-zA-Z0-9\.\-]+)
[^.+?](@[a-zA-Z0-9\.\-]+)
(@[a-zA-Z0-9\.\-]+)
之前包含什么,以确保我只检测到@
符号以及紧跟其后的第一个最后一个格式的字符
非常感谢您的帮助。使用
[a-zA-Z0-9.]+
是一种广泛的匹配,因为它不能保证点不在末尾。它可以匹配列出的任何一个,因此,例如-->也是有效的。请注意,如果点在末尾,则不必转义点,也不必转义破折号
(@[a-zA-Z0-9\.\-]+)
两者都匹配,因为在左侧和右侧没有设置边界
[^\[](@[a-zA-Z0-9\.\-]+)
匹配包括前导空格,因为该前导空格由与非[
匹配的否定字符类[^\[]
匹配
[^\[\s](@[a-zA-Z0-9\.\-]+)
不匹配,因为现在被求反的字符类[^\[\s]
不允许匹配前导空格
[^.+?](@[a-zA-Z0-9\.\-]+)
与前面的[
匹配,因为前面的[^.+?]
与
或不匹配
您可以使用一个捕获组,该组可以匹配字符串的开头或空格字符,然后将@部分与单词字符和点匹配:
(^|\s)@\w+\.\w+(?!\S)
解释
(^ |\s)
捕获组1,字符串或空格字符的开头
@\w+\.\w+
匹配@
,然后是1+字字符、一个点和1+字字符(代替\w
,您也可以使用[a-zA-Z0-9]
(?!\S)
断言右边的字符不是非空白字符
在替换中,使用第一个捕获组,然后是替换$1Keanu
regex=/(^ |\s)@\w+\.\w+(?!\s)/g;
str='Hey@first.last告诉[@first.last]检查这个';
str=str.replace(regex,“$1Keanu”);
console.log(str);
我猜这个表达式可能在这里也适用
(\s+|^)(@[a-z0-9-]+\.[a-z0-9-]+)(\s+|$)
\s+
是增加空格的一种以防万一的方法,如果愿意,我们只需修改char类即可
const regex=/(\s++^)(@[a-z0-9-]+\.[a-z0-9-]+)(\s++$)/gis;
const str=`一些单词@first.last更多单词@first.last
一些单词@first.last更多单词@first.last012其他一些文本
一些单词@first.last更多单词@first.last012\$%^&
一些words@first.last更多words@first.last`;
常量subst=`1Keanu$3`;
const result=str.replace(regex,subst);
console.log(result);
你的意思是这样吗?(^ |\s)@\w+.\w+(?!\s)
你列出的第一个模式很好,这些可视化可能对那些已经可以编写(基本)正则表达式的人没有太大帮助。这非常有效。它还教会了我以前没有意识到的环顾四周的方法。谢谢!