我有以下文字:
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*)+)
但是,结果,我只得到了最后一个字,并且两次。
我会说我有this问题,但我尝试了文章提出的建议而没有成功。
有人知道如何解决这个问题吗?
注意我需要这是一个正则表达式,因为我正在解析一个未知文本,如果有完全匹配,我知道我用什么样的数据。处理。 例如,这不能匹配:
Mustn't match: 'sept à juin'
答案 0 :(得分:0)
在删除尾随标点后,只需拆分此正则表达式:
/[ ,.]+/
演示:
var str = "lun. et mer. - mar.";
var words = str.replace(/[ .,]+$/, "").split(/[ ,.]+/);
console.log(words);

输出:
[
"lun",
"et",
"mer",
"-",
"mar"
]
答案 1 :(得分:0)
可能你可以做到以下几点:
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));

答案 2 :(得分:0)
您可以在不使用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');