1

这是一个示例字符串:

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

foo只需foo要从那里或类似的场景中提取。

the+和 the#是我唯一需要担心的字符。

但是,无论前面是什么foo,都需要剥离或忽略它。之后的一切都需要。

4

3 回答 3

2

尝试这个:

/\++#(\w+)/

并抓住捕获组一。

于 2013-11-07T03:18:29.840 回答
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..
}
于 2013-11-07T03:25:54.930 回答
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_]. 您的数据是否有任何其他内容,例如标点符号、破折号、括号或您希望在匹配中包含的任何其他字符?使用我建议的否定字符类将捕获每个不包含 a+或 a 的标记#

于 2013-11-07T03:37:57.880 回答