正则表达式没有获得整个子字符串

时间:2017-03-06 09:24:54

标签: javascript regex

我的输入字符串如下所示:

&hello=HI1&op=1h23&hello=&op=&hello=HI3&op=&hello=HI4&op=OP4

如果你好有文字,我喜欢要捕获的数据。 op参数是可选的,可能有也可能没有值。在上面的字符串中,我想要以下输出(每行将作为一个单独的值存储在数组中):

hello=HI&op=1h23
hello=HI3&op=
hello=HI4&op=OP4

我得到的主要是工作,但问题是如果op在单词“hello”中有任何字母的值,那么op的剩余部分将被捕获。正如您在上面的示例字符串中所看到的,第一个op值是1h23,在h之后,值23不被捕获。

https://regex101.com/r/Er0kEo/2

我试过了:

/&hello=[A-z 0-9]+&op=[^&hello]*/gi

这主要有效,除非op的值包含单词“hello”中的任何字母。我也试过了:

/&hello=[A-z 0-9]+&op=.+?(?=&hello)/gi

仅捕获第一个输入。还试过(?!& hello) - 稍微好些但不能捕获最后一个输入。尝试使用\ b并且没有做得很远,也没有做过& hello $。

我觉得自己错过了一些不过5小时的小事,但我还是打败了。

3 个答案:

答案 0 :(得分:0)

使用正则表达式/&(hello=\w*&op=\w*)/,将提供以下必需的匹配项:

hello=HI&op=1h23
hello=HI3&op=
hello=HI4&op=OP4

JavaScript演示



var pattern = /&(hello=\w*&op=\w*)/g;

var str = "&hello=HI1&op=1h23&hello=&op=&hello=HI3&op=&hello=HI4&op=OP4";

var result;

while (result = pattern.exec(str)) {
  console.log(result[1]);
}




答案 1 :(得分:0)

尝试使用以下正则表达式(使用positive look-ahead

  var entity = new DynamicTableEntity("tomtest", "pk"); //PK, RK
  entity.Properties.Add("EndTime", new EntityProperty(DateTime.UtcNow));      //properties want to add    
  var mergeOperation = TableOperation.InsertOrMerge(entity);
  table.Execute(mergeOperation);

<强> DEMO

<强>的JavaScript

&#13;
&#13;
hello=[a-z0-9]+&op=[^&]*
&#13;
&#13;
&#13;

答案 2 :(得分:0)

/hello=[a-z\s0-9]+&op=[a-z0-9]*/gi

结果

Match 1
Full match  1-18    `hello=HI1&op=1h23`
Match 2
Full match  30-43   `hello=HI3&op=`
Match 3
Full match  44-60   `hello=HI4&op=OP4`

https://regex101.com/r/Er0kEo/3