当前面的数字或前面字符的组合未知时,提取字符串

时间:2013-11-07 03:07:02

标签: javascript regex

这是一个示例字符串:

++++#foo+bar+baz++#yikes

我需要从那里或类似场景中提取foofoo

+#是我唯一需要担心的角色。

但是,无论foo之前的是什么,都需要删除或忽略它。在它需要之后的其他所有事情。

3 个答案:

答案 0 :(得分:2)

试试这个:

/\++#(\w+)/

并抓住捕获组。

答案 1 :(得分:1)

您只需使用match()方法。

var str = "++++#foo+bar+baz++#yikes";
var res = str.match(/\w+/g);

console.log(res[0]);  // foo
console.log(res);     // foo,bar,baz,yikes 

或使用exec

var str = "++++#foo+bar+baz++#yikes";
var match = /(\w+)/.exec(str);
alert(match[1]); // foo

execg修饰符(全局)一起使用是为了在循环中使用所有子匹配。

var str = "++++#foo+bar+baz++#yikes";
var re  = /\w+/g;
var match;

while (match = re.exec(str)) {
   // In array form, match is now your next match..
}

答案 2 :(得分:1)

+#如何在识别foo方面发挥作用?如果您只想要#之后的任何字符串,并由+终止,就像这样简单:

var foostring = '++++#foo+bar+baz++#yikes';
var matches = (/\#([^+]+)\+/g).exec(foostring);
if (matches.length > 1) {
    // all the matches are found in elements 1 .. length - 1 of the matches array
    alert('found ' + matches[1] + '!'); // alerts 'found foo!'
}

为了更具体地帮助您,请提供有关数据可能变化的信息,以及如何识别您想要提取的令牌,即使在长度和字符不同的情况下也是如此。

如果您只是在寻找+#的任意组合之前和之后的第一段文字,请使用:

var foostring = '++++#foo+bar+baz++#yikes';
var result = foostring.match(/[^+#]+/);
// will be the single-element array, ['foo'], or null.

根据您的数据,使用\w可能过于严格,因为它等同于[a-zA-z0-9_]。您的数据是否还有其他任何内容,例如标点符号,破折号,括号或您希望包含在匹配中的任何其他字符?使用否定字符类我建议将捕获不包含+#的每个令牌。