我正在使用一种接近javascript的语言为我的实习项目,但是我正在使用的正则表达式遇到问题,其要点是: 我有以下文字:
Article 1243fdsg Article hf453dfg Article ds g,f re d.4 '35 67f before here
我只需要获得
ds g,f re d.4 '35 67f
部分而不是整个字符串
我尝试了很多事情,并在网上进行搜索,但是找不到了, 到目前为止,我的正则表达式是:
Article.*?before here
edit:最后一个“ Article”和“ before here”之间的字符串可能包含最常用的阅读符号,并且由于时间不确定,因此大多数情况下还会包含空格和定额标记
答案 0 :(得分:0)
您可以尝试使用“向前看正面” (?=)
向前看:查找表达式B紧随其后的表达式A:A(?=B)
Article [a-zA-Z0-9]+ (?=before here)
输出:
Article dsgfred43567f
答案 1 :(得分:0)
一些需要注意的事情:
.
与JavaScript中的换行符不匹配。如果需要,请改用[^]
(或[\S\s]
)Article
在匹配的内容中不会再次出现。为此,您可以使用否定的前瞻:(?!Article)
这是建议的代码:
const text = `Article 1243fdsg Article hf453dfg Article dsgfred43567f
a line break, some spaces and 'punctuation'! before here`;
const result = text.match(/Article(((?!Article)[^])*)before here/);
console.log(result[1]);
如果需要包含Article
和before here
,则输出result[0]
而不是result[1]
。
请注意,正则表达式并非始终是最有效的解决方案,当然当它们需要四处查看时也不一定。使用其他字符串方法,例如split
,将获得更好的性能。例如:
const text = `Article 1243fdsg Article hf453dfg Article dsgfred43567f
a line break, some spaces and 'punctuation'! before here`;
const result1 = text.split("before here");
if (result1.length > 1) {
const result = result1[0].split("Article");
if (result.length > 1) {
console.log(result.pop());
}
}
这是更多代码,但可以保证更快。