这是一个示例字符串:
++++#foo+bar+baz++#yikes
我需要从那里或类似场景中提取foo
和foo
。
+
和#
是我唯一需要担心的角色。
但是,无论foo
之前的是什么,都需要删除或忽略它。在它需要之后的其他所有事情。
答案 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
将exec
与g
修饰符(全局)一起使用是为了在循环中使用所有子匹配。
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_]
。您的数据是否还有其他任何内容,例如标点符号,破折号,括号或您希望包含在匹配中的任何其他字符?使用否定字符类我建议将捕获不包含+
或#
的每个令牌。