Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找不以特殊字符(“@[”开头)开头的第一个字符串_Javascript_Regex - Fatal编程技术网

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

Javascript 查找不以特殊字符(“@[”开头)开头的第一个字符串,javascript,regex,Javascript,Regex,我需要找到第一个不以“@[”开头的给定字符串(“名称”) 我使用了模式=/[^@\[]名称/ 这将返回正确的匹配项,但在特定字符串之前有空格 即返回“name”(在“my”之后的一个) 如何仅获取开头没有空格的字符串“name”?根据您的示例输入,“在第一次出现结束参数后第一次出现name”: 您可以在替换中使用$1,以保留导致字符串名称的任何内容 str.replace(/(\).*?)name/, "$1foo"); // -> "@[name](com.domain.company

我需要找到第一个不以“@[”开头的给定字符串(“名称”)

我使用了
模式=/[^@\[]名称/

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


如何仅获取开头没有空格的字符串“name”?

根据您的示例输入,“在第一次出现结束参数后第一次出现
name
”:

您可以在替换中使用
$1
,以保留导致字符串
名称的任何内容

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

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

正确识别
@[…](…)…
构造的完整表单如下所示:

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

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

如果不强制使用regex,请尝试此方法

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

为什么不修剪一下你得到的东西,比如
“sad”.trim()
你想在这个字符串中找到一个包含特定文本的单词,例如,
名称
,它不是以
@
开头的,对吗?那么你想用它做什么,用另一个字符串替换它就可以了,但是当名称以新行开头时,模式不匹配。var str=“@[name](com.domain.company:66)我的名字和另一个名字“我试过这个但没用,/()*?\n?)名字/使用
[\s\s]
而不是
-或者直接使用第二种模式。
yourString.match(/[^@\[](name)/)[1];
var str="@[name](com.domain.company:66) my name and another name";

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

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