【问题标题】:Regexpression OR正则表达式或
【发布时间】:2014-02-04 11:21:43
【问题描述】:

我有下一个字符串:

1 2 OR 3 4 OR 5 OR 6 7 OR 8

我需要根据 OR 使用正则表达式将它分隔在不同的部分,例如从这一行我需要得到下一个:

1
2 OR 3
4 OR 5 OR 6
8 OR 8

//1 (2 OR 3) (4 OR 5 OR 6) (7 OR 8)

怎么做 - 谢谢!)

抱歉,忘了提一下,这里不仅可以是数字:第一个第二个或第三个第四个或第五个或第六个第七个或八个

【问题讨论】:

  • 我试过 /([^\s"]+|"[^"]*")( +OR +([^\s"]+|"[^"]*")) +/我

标签: javascript regex


【解决方案1】:

使用正则表达式匹配一个数字,该数字后跟任意数字 OR 和另一个数字:

var s = '1 2 OR 3 4 OR 5 OR 6 7 OR 8';

var re = /\d+(?: OR \d+)*/g;
var m;
while ((m = re.exec(s)) != null) {
  console.log(m[0]);
}

演示:http://jsfiddle.net/Guffa/q5fw6/

【讨论】:

  • 对不起,但忘了提一下,这里不能只有数字:第一个第二个或第三个第四个或第五个或第六个第七个或八个
  • ""nor only digits"?这是什么意思?你能举个例子吗?
  • @Simha:啊哈,那么只需将正则表达式中的\d 更改为[^ ] 即可匹配任何非空格字符而不仅仅是数字。演示:jsfiddle.net/Guffa/q5fw6/1
【解决方案2】:

这个简单的正则表达式应该可以工作:

var str = '1 2 OR 3 4 OR 5 OR 6 7 OR 8';
str.match(/\w+( OR \w+)*/g);

【讨论】:

  • 对不起,但忘了提一下,这里不能只有数字:第一个第二个或第三个第四个或第五个或第六个第七个或第八个
【解决方案3】:

你可以使用:

x.replace(/(\d+)\s+(\d+)/g, "$1\n$2");

其中x"1 2 OR 3 4 OR 5 OR 6 7 OR 8"

输出将是:

1 
2 OR 3 
4 OR 5 OR 6 
7 OR 8

【讨论】:

  • 对不起,但忘了说,这里不能只有数字:第一个第二个或第三个第四个或第五个或第六个第七个或第八个
【解决方案4】:

这可能是你需要的:

(?:^|(?<=\d ))(\d+(?: +OR +\d+)*)(?=(?: +\d|$))

将输出以下匹配项:

[Match number 1]
[Capture Group 1] '1' found at character 1

[Match number 2]
[Capture Group 1] '2 OR 3' found at character 3

[Match number 3]
[Capture Group 1] '4 OR 5 OR 6' found at character 10

[Match number 4]
[Capture Group 1] '7 OR 8' found at character 22

【讨论】:

  • 抱歉,但忘了提一下,这里不能只有数字:第一个第二个或第三个第四个或第五个或第六个第七个或第八个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多