JavaScript RegExp从起始位置删除@符号

JavaScript RegExp从起始位置删除@符号,javascript,regex,regex-negation,Javascript,Regex,Regex Negation,我想修改正则表达式以删除@size,但只选择以@sign开头的单词。 以下是我的代码,查看 JS 结果 预期结果 由于JavaScript没有look-behind,我认为您不能在单个match语句(无需后期处理)中完成,因为您需要一个捕获组 ES5的数组#map(可以填充)的后处理非常简单,当然: var s = a.match(/(?=(\s{1}?@[^\s]+)|(\s?))(@[^\s]+)(?=(\s))/g).map(function(entry) { return ent

我想修改正则表达式以删除@size,但只选择以@sign开头的单词。

以下是我的代码,查看

JS 结果 预期结果

由于JavaScript没有look-behind,我认为您不能在单个
match
语句(无需后期处理)中完成,因为您需要一个捕获组

ES5的
数组#map
(可以填充)的后处理非常简单,当然:

var s = a.match(/(?=(\s{1}?@[^\s]+)|(\s?))(@[^\s]+)(?=(\s))/g).map(function(entry) {
    return entry.substring(1);
});
否则,您将需要使用捕获组和
exec
循环

顺便说一句,我认为正则表达式可以简单得多,如果您只需要
\s
分隔:

var a=“@abc@jat hi pat@jkl abc@cde vcd@cde”;
var s=a.match(/@\s+/g).map(函数(条目){
返回条目。子字符串(1);
});
显示(s.join(“,”);
功能显示(msg){
document.body.insertAdjacentHTML(
“之前”,
“”+msg+“

” );
}
由于JavaScript没有后视功能,我认为您不能在一个
匹配
语句中(无需后期处理)完成它,因为您需要一个捕获组

ES5的
数组#map
(可以填充)的后处理非常简单,当然:

var s = a.match(/(?=(\s{1}?@[^\s]+)|(\s?))(@[^\s]+)(?=(\s))/g).map(function(entry) {
    return entry.substring(1);
});
否则,您将需要使用捕获组和
exec
循环

顺便说一句,我认为正则表达式可以简单得多,如果您只需要
\s
分隔:

var a=“@abc@jat hi pat@jkl abc@cde vcd@cde”;
var s=a.match(/@\s+/g).map(函数(条目){
返回条目。子字符串(1);
});
显示(s.join(“,”);
功能显示(msg){
document.body.insertAdjacentHTML(
“之前”,
“”+msg+“

” );
}
由于JavaScript没有后视功能,我认为您不能在一个
匹配
语句中(无需后期处理)完成它,因为您需要一个捕获组

ES5的
数组#map
(可以填充)的后处理非常简单,当然:

var s = a.match(/(?=(\s{1}?@[^\s]+)|(\s?))(@[^\s]+)(?=(\s))/g).map(function(entry) {
    return entry.substring(1);
});
否则,您将需要使用捕获组和
exec
循环

顺便说一句,我认为正则表达式可以简单得多,如果您只需要
\s
分隔:

var a=“@abc@jat hi pat@jkl abc@cde vcd@cde”;
var s=a.match(/@\s+/g).map(函数(条目){
返回条目。子字符串(1);
});
显示(s.join(“,”);
功能显示(msg){
document.body.insertAdjacentHTML(
“之前”,
“”+msg+“

” );
}
由于JavaScript没有后视功能,我认为您不能在一个
匹配
语句中(无需后期处理)完成它,因为您需要一个捕获组

ES5的
数组#map
(可以填充)的后处理非常简单,当然:

var s = a.match(/(?=(\s{1}?@[^\s]+)|(\s?))(@[^\s]+)(?=(\s))/g).map(function(entry) {
    return entry.substring(1);
});
否则,您将需要使用捕获组和
exec
循环

顺便说一句,我认为正则表达式可以简单得多,如果您只需要
\s
分隔:

var a=“@abc@jat hi pat@jkl abc@cde vcd@cde”;
var s=a.match(/@\s+/g).map(函数(条目){
返回条目。子字符串(1);
});
显示(s.join(“,”);
功能显示(msg){
document.body.insertAdjacentHTML(
“之前”,
“”+msg+“

” );
}
除非有令人信服的理由需要为此编写一个regexp,否则最好只进行一些标准的拆分和过滤

a.split(/\s+/)
    .filter(function(seg) { return seg[0]==='@'; })
    .map   (function(seg) { return seg.slice(1); })
如果您可以使用箭头函数,看起来就不会那么糟糕了:

a.split(/\s+/)
    .filter(seg => seg[0]==='@')
    .map   (seg => seg.slice(1))

除非有令人信服的理由需要为此编写一个regexp,否则最好只做一些标准的拆分和过滤

a.split(/\s+/)
    .filter(function(seg) { return seg[0]==='@'; })
    .map   (function(seg) { return seg.slice(1); })
如果您可以使用箭头函数,看起来就不会那么糟糕了:

a.split(/\s+/)
    .filter(seg => seg[0]==='@')
    .map   (seg => seg.slice(1))

除非有令人信服的理由需要为此编写一个regexp,否则最好只做一些标准的拆分和过滤

a.split(/\s+/)
    .filter(function(seg) { return seg[0]==='@'; })
    .map   (function(seg) { return seg.slice(1); })
如果您可以使用箭头函数,看起来就不会那么糟糕了:

a.split(/\s+/)
    .filter(seg => seg[0]==='@')
    .map   (seg => seg.slice(1))

除非有令人信服的理由需要为此编写一个regexp,否则最好只做一些标准的拆分和过滤

a.split(/\s+/)
    .filter(function(seg) { return seg[0]==='@'; })
    .map   (function(seg) { return seg.slice(1); })
如果您可以使用箭头函数,看起来就不会那么糟糕了:

a.split(/\s+/)
    .filter(seg => seg[0]==='@')
    .map   (seg => seg.slice(1))


谢谢你的回答,但我不会访问其他功能(如地图)来存档。你能修改我的regexp模式来存档吗。thanks@user1153551:不,我不能。我怀疑没有其他人也可以,因为我上面给出的原因(JavaScript没有后视功能)。我不确定,但可能是Python RegExp有这个select协商。而JS没有surprising@user1153551:不同语言中不同风格的正则表达式具有不同的功能。这是一个非常好的资源,因为它讨论了很多不同之处。好的,没问题,我会这样做的。谢谢马特·伯兰和T.J.克劳德谢谢你们的回答,但我不会访问其他功能(如地图)来存档。你能修改我的regexp模式来存档吗。thanks@user1153551:不,我不能。我怀疑没有其他人也可以,因为我上面给出的原因(JavaScript没有后视功能)。我不确定,但可能是Python RegExp有这个select协商。而JS没有surprising@user1153551:不同语言中不同风格的正则表达式具有不同的功能。这是一个非常好的资源,因为它讨论了很多不同之处。好的,没问题,我会这样做的。谢谢马特·伯兰和T.J.克劳德谢谢你们的回答,但我不会访问其他功能(如地图)来存档。你能修改我的regexp模式来存档吗。thanks@user1153551:不,我不能。我怀疑没有其他人也可以,因为我上面给出的原因(JavaScript没有后视功能)。我不确定,但可能是Python RegExp有这个select协商。而JS没有surprising@user1153551:不同口味的正则表达式