Javascript 使用RegExp提取特定字符串
我有一根这样的绳子Javascript 使用RegExp提取特定字符串,javascript,regex,Javascript,Regex,我有一根这样的绳子 示例1@abc@xy及@xyz@abc.com例2 现在,我想删除在遇到第二个@之后出现的字符串,即@example.com@abc.com,并保留剩余的数据,这些数据应该如下所示: 示例1@abc和@xyz示例2 我已经尝试了很多RegExp,看到了很多例子,但到目前为止没有运气 如果有人尝试过类似的方法,如果你能帮助我,那就太好了。试试这个模式:^[^@]*@[^@]+(?=@)。它将匹配第二个@之前的所有内容。它锚定在字符串的开头,首先它匹配除@:[^@],然后匹配@
示例1@abc@xy及@xyz@abc.com例2
现在,我想删除在遇到第二个@
之后出现的字符串,即@example.com
@abc.com
,并保留剩余的数据,这些数据应该如下所示:
示例1@abc和@xyz示例2
我已经尝试了很多RegExp,看到了很多例子,但到目前为止没有运气
如果有人尝试过类似的方法,如果你能帮助我,那就太好了。试试这个模式:
^[^@]*@[^@]+(?=@)
。它将匹配第二个@
之前的所有内容。它锚定在字符串的开头,首先它匹配除@
:[^@]
,然后匹配@
,然后再次匹配除@
:[^@]
之外的所有内容,直到满足下一个@
:(?=@
(正向前瞻)
捕获组中的第一个
@
字符,后跟非@
字符,然后再次匹配@
字符,后跟非空格字符,并替换为第一个捕获的组:
(@[^@]+?)@[^ ]+?(?= )
结果:
Example 1 @abc and @xyz Example 2
请注意,这也将替换一行中超过第一个-eg@abc@xy@foo
将成为@abc
字符串输入=@“示例1@abc@xy及@xyz@abc.com例2”;
string input = @"Example 1 @abc@xy<a href=""http://-example.com"">-example.com</a> and @xyz@abc.com Example 2";
string pattern = @"@.+?(?=@|$)";
int x = 0;
string s = Regex.Replace(
input,
pattern,
m => ++x == 2 ? Regex.Match(m.Value, @">(\s+.+?\s+)$").Groups[1].Value : m.Value);
字符串模式=@“@.+?(?=@|$)”;
int x=0;
字符串s=Regex.Replace(
输入
图案
m=>++x==2?Regex.Match(m.Value,@“>(\s++?\s+$))。组[1]。值:m.Value);
解释
首先,从搜索
@
符号开始。变量x
正在跟踪@
的出现次数。一旦它达到2,我们就提取结尾和
之间的所有内容。如果x
不等于2,那么我们只返回匹配(m.Value
) 对于示例的后半部分,您可以简单地匹配两个@
s,并通过分组并在替换中使用它们来仅替换第二个
模式:/(@[^\s@]*)@[^\s@]*/g
替换:“$1”
这将匹配后跟空格和@以外的任何字符的@,并将其存储在组1中。然后它匹配下一个@和除空格和@之外的任何内容
如果两个@s之间可能存在其他内容,您可以调整您的模式以使用捕获组的(@[^@]*)
对于示例的第一部分,您必须找到更好的模式来匹配第二部分后面的内容@,这可能是
@[^\s@hey谢谢,但只有当我的字符串以一个@
开头时它才起作用,但事实并非如此。第二个@之后出现的字符串-你对什么属于该字符串和什么不属于该字符串有一个清晰的定义吗?在你的示例中,它似乎是@xy
-为什么不@xy
或者@xy和嘿,@xy
整个零件需要更换。和
将被保留。和
是否总是在第二个@
的末尾?@shryahaha这将是(@[^\s@*)@[^\s@]*
并替换为$1
。您使用什么语言来实现此功能?您不需要所有这些非贪婪的量词和积极的前瞻:(@[^@]+)@\s+
有效。非常感谢。