繁体   English   中英

查找第一个不以特殊字符(“ @ [”)开头的字符串

[英]Find the first string that not start with special character(“@[”)

我需要找到不是以“ @ [”开头的给定字符串(“名称”)的首次出现。

var str="@[name](com.domain.company:66) my name and another name"

我使用了pattern=/[^@\\[]name/

这将返回正确的匹配,但在特定字符串之前空格,即返回“名称”(“ my”之后的一个)

我如何只获得字符串“ name”而开头没有空格?

根据您的样本输入,如何“在第一个封闭括号第一次出现之后第一次出现name ”:

/(\).*?)name/

您可以在替换中使用$1保留导致字符串name所有开头。

str.replace(/(\).*?)name/, "$1foo");

// -> "@[name](com.domain.company:66) my foo and another name"

正确识别@[...](...) ...构造的完整格式如下所示:

/(@\[[^\]]+\]\([^)]+\)(?:(?!@\[)[\s\S])*?)name/

它的使用方式与上述相同,但是可以正确处理较长文本中的多次出现。

如果不是必须使用正则表达式,请尝试此方法

var str="@[name](com.domain.company:66) my name and another name";
var result = str.split( /\s/ ).reduce( function(prev,current){
  if ( current.indexOf( "name" ) != -1 && current.indexOf( "@[" ) != 0 )
  {
    return current;
  }
  return prev;

} );
alert(result);

您可以使用正则表达式组,例如:

yourString.match(/[^@\[](name)/)[1];

[1]表示得到第一组内的字符串(内部()

如果@之后的名称始终位于[]之内,则可以使用以下命令:

var str="@[name](com.domain.company:66) my name and another name";

var reg = /[^@\[][^\]]+/;

console.log(str.match(reg)[0]); //prints name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM