【问题标题】:Regex grouping inside of a ignoring repeating group忽略重复组内的正则表达式分组
【发布时间】:2018-10-30 01:44:55
【问题描述】:

我有以下文字:

Example 1: 'lun et mer et mar'

Example 2: 'lun. et mer. - mar.'

Example 3: 'lun a ven'

Negative example 4 (must not match): 'sept à juin'

Negative example 5 (must not match): 'foo bar'

Negative example 6 (must not match): '9h30 - 18h'

我正在尝试对每个单词进行分组,所以想要的结果是:

Example 1: ['lun', 'et', 'mer', 'et', 'mar']

Example 2: ['lun', 'et', 'mer', '-', 'mar']

Example 3: ['lun', 'a', 'ven']

我尝试的正则表达式是here:

(?:((lun|mar|mer)\.?\s*(\-|au|a|à|et)?\s*)+)

但是,结果,我只得到最后一个单词“mar”,两次。

我会说我有this 的问题,但我尝试了文章建议的方法,但没有成功。

有人知道如何解决这个问题吗?

注意我需要这是一个正则表达式,因为我正在解析一个未知文本,如果完全匹配,我知道我正在处理什么样的数据。 例如,这不能匹配:

Mustn't match: 'sept à juin' 

【问题讨论】:

  • 你需要什么语言的?
  • @chrisz in JavaScript
  • @chrisz 你为什么要删除你的答案?我觉得很好。
  • 只是觉得它的质量很差。有更好的方法来解决这个问题。

标签: javascript regex regex-group regex-greedy


【解决方案1】:

删除尾随标点符号后,只需拆分此正则表达式:

/[ ,.]+/

演示:

var str = "lun. et mer. - mar.";
var words = str.replace(/[ .,]+$/, "").split(/[ ,.]+/);
console.log(words);

输出:

[
  "lun",
  "et",
  "mer",
  "-",
  "mar"
]

【讨论】:

  • 谢谢,但这对我不起作用。请查看我的更新答案
【解决方案2】:

您可以在不捕获组的情况下使用g 标志进行多次匹配:

function words(s) {
  let a = s.match(/[a-z-]+/g);
  console.log(a);
}

words('lun et mer et mar');
words('lun. et mer. - mar.');
words('lun a ven');

【讨论】:

  • 谢谢,但这对我不起作用。请查看我的更新答案
  • @pegasus 请继续更新您的问题:您说“我有以下文字”...但是您的示例是独立的,没有嵌入更大的文字中。请在您的问题中更正此错误。就您的问题而言,这个答案非常有效。
  • 完成了,请看一下
【解决方案3】:

也许您可以执行以下操作:

let Example1 = 'lun et mer et mar';
let Example2 = 'lun. et mer. - mar.';
let Example3 = 'lun a ven';
let Example4 = 'sept à juinn';

function format(str){
  str = /(lun|mar|mer)/.test(str) ? str : '';
  return str.split(' ').map(i=>i.replace(/[.]/,'')).filter(j=>j)
}
console.log(format(Example1));
console.log(format(Example2));
console.log(format(Example3));
console.log(format(Example4));

【讨论】:

  • 谢谢,但这对我不起作用。请查看我的更新答案
  • @pegasus,你能解释一下won't work for me..... 因为 sn-p 中的答案显示了所有输入集的预期输出.....
  • 作为输入,我有一个原始文本,我必须对其进行解析以查找特定数据。我用一个不能匹配的例子更新了我的问题 - 'sept à juin'
  • @pegasus,不匹配sept à juin背后的条件应该是什么?
  • 业务需求。我应该只将lun|mar|mer 与几个特殊的分隔符匹配
猜你喜欢
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 2012-10-22
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2013-08-13
相关资源
最近更新 更多