1

我想在一个字符串之间解析

例如 str='uu2uuuu4uuu';

虽然当我使用

警报(str.match(/(2\S+?4)+/ig));

当我只想要'uuuu'时,我会在外面得到'2uuuu4'

4

2 回答 2

0

如果您使用标志 'g' 它将匹配所有字符串,而不管 '()' 因为它是分组的。你需要这样的东西

var str='uu2uuuu4uuu';
alert(str.match(/2([^24]+)+4/i));

或消除该地区的任何数字

alert(str.match(/\d+([^\d]+)+\d+/i));
于 2013-03-20T00:18:36.983 回答
0

你想要的东西需要向后看和向前看。例如:

(?<=START)(.*?)(?=END)

或仅用于非空格:

(?<=START)(\S*?)(?=END)

或者,如果您只想匹配至少一个字符:

(?<=START)(.+?)(?=END)
(?<=START)(\S+?)(?=END)

如果你只是匆忙添加到你的代码,我很抱歉告诉你......

但是Javascript 不支持正则表达式lookbehind(即,(?<=START)在javascript 中无效)。因此,您将不得不放弃g标志并使用如下正则表达式获取第二个结果(索引 = 1):

START(.*?)(?=END)

它会是这样的:

var str = 'uu2uuuu4uuu';
var match = str.match(/2(.*?)(?=4)/i);
alert(match[1]);

或这个:

var str = 'uu2uuuu4uuu';
var match = str.match(/2(\S+?)(?=4)/i);
alert(match[1]);

你明白了。我还没有找到更好的方法来模拟 javascript 中的正则表达式。

于 2013-03-20T01:03:18.030 回答