在类似于:
的句子中Lorem ipsum + dolor ++ sit amet。
我想匹配+dolor
而不是++sit
。我可以通过后视来做到这一点,但由于JavaScript
不支持它,我努力为它构建模式。
到目前为止,我已尝试过:
(?:\+(.+?))(?=[\s\.!\!]) - but it matches both words
(?:\+{1}(.+?))(?=[\s\.!\!]) - the same here - both words are matched
令我惊讶的是:
(?=\s)(?:\+(.+?))(?=[\s\.!\!])
不匹配任何东西。我以为我可以把它搞砸一下,然后在\s
符号之前使用^
或更晚+
,但它似乎不会像那样工作。
编辑 - 背景资料:
这不一定是问题的一部分,但有时候了解这一切有什么好处,以便澄清一些问题/评论的简短说明是很好的:
+
或++
<span>
稍后的(?=[\s\.!\!])
这样的预测,以便我可以匹配任何语言中的单词而不仅仅是\w
个字符答案 0 :(得分:3)
一种方法是匹配一个额外的角色并忽略它(通过将匹配的相关部分放入捕获组):
(?:^|[^+])(\+[^\s+.!]+)
但是,如果潜在的匹配可能彼此直接相邻,则会发生故障。
<强>解释强>
(?: # Match (but don't capture)
^ # the position at the start of the string
| # or
[^+] # any character except +.
) # End of group
( # Match (and capture in group 1)
\+ # a + character
[^\s+.!]+ # one or more characters except [+.!] or whitespace.
) # End of group
答案 1 :(得分:3)
\+\+|(\+\S+)
抓取捕获组1中的内容。正则表达式使用in this answer描述的技巧。
var re = /\+\+|(\+\S+)/g;
var str = 'Lorem ipsum +dolor ++sit ame';
var m;
var o = [];
while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
if (m[1] != null) {
o.push(m[1]);
}
}
如果您输入+++donor
,请使用:
\+\++|(\+\S+)
答案 2 :(得分:1)
以下正则表达式似乎对我有用:
var re = / (\+[a-zA-Z0-9]+)/ // Note the space after the '/'
演示
答案 3 :(得分:1)
我认为这就是你所需要的。
(?:^|\s)(\+[^+\s.!]*)(?=[\s.!])
答案 4 :(得分:0)
试试以下正则表达式:
(^|\s)\+\w+