如何只匹配由点连接的单词

How match only words connected by dots?

本文关键字:连接 单词      更新时间:2023-09-26

我只想匹配通过点连接到其他单词的单词。例如,在下面的例子中,我想匹配"二"、"三"、"四",但而不是"一":

//match only "two" "three" and "four"
.one .two.three.four

我该怎么做?

我试过了,但不起作用:

('w+)(('.(([^'.]+'w)+))+)
(?<='.)('w+)(?='.'w+)|(?<='w'.)('w+)|(?<='s)('w+)(?='.'w+)

试试这个。请参阅演示。

http://regex101.com/r/jT3pG3/20

仅针对js,因为不支持lookbacking

(?='.('w+)'.'w+)|(?='s('w+)'.'w+)|(?='w'.('w+)'b)

请参阅演示。

http://regex101.com/r/jT3pG3/22

只需删除重复的结果,因为某些组可能满足多个条件。

你试过这个吗?

'S+'.'S+/i

这里有一个你可以轻松练习regex的网站。http://rubular.com/r/FguTt59e8E

如果只要求单词与点链接(即单词链的第一个单词之前不需要初始点),则可以使用此较短的正则表达式:

(?=('b'w+'b)(?='.('w+'b)(?!'.)|'.'w+))

也不提供重复匹配;因此不需要过滤;你只需要检查第一和第二个子比赛。第一个子匹配将包含大部分单词,而第二子匹配将包含链的最后一个单词。

大量使用lookahead,但我认为JS中没有regex解决方案。

regex101演示

一个可能的替代方案是匹配由一个点连接的每个单词链,然后在点上拆分。。。

var s = ".one .two.three.four  .one. one.two";
var reg = /'b'w+(?:'.'w+)+'b/g;
var count = 0
while ((m = reg.exec(s)) != null) {
    var words = m[0].split(".");
    console.log("Word chain " + count + ": " + words.join(",") + "'n");
    count++;
}

jsfiddle演示