找到第一个不以特殊字符开头的字符串(" @ [")

时间:2016-02-04 10:12:33

标签: javascript regex

我需要找到第一次出现的给定字符串("名称"),这些字符串不以" @ ["。

开头
<div id="editor" style="height: 500px; width: 800px">Type in a word like "will" below and press ctrl+space or alt+space to get "rhyme completion"</div>
<div id="commandline" style="position: absolute; bottom: 10px; height: 20px; width: 800px;"></div>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="https://rawgithub.com/ajaxorg/ace-builds/master/src/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="https://rawgithub.com/ajaxorg/ace-builds/master/src/ext-language_tools.js" type="text/javascript" charset="utf-8"></script>

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

返回正确的匹配但在特定字符串之前有空格 我回来了#34;命名&#34; (&#34;我和#34;之后的那个)

我怎样才能获得字符串&#34; name&#34;一开始没有空间?

4 个答案:

答案 0 :(得分:0)

根据你的样本输入,“关闭paren第一次出现后name的第一次出现”:

/(\).*?)name/

您可以在替换中使用$1来保留字符串name之前的所有内容。

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

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

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

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

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

答案 1 :(得分:0)

如果不强制使用正则表达式,请尝试使用此方法

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);

答案 2 :(得分:0)

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

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

[1]表示获取第一组内的字符串(()内)

答案 3 :(得分:0)

如果@之后的名字总是在[]内,你可以使用:

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

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

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