Javascript 捕获周期,但不在链接内部

Javascript 捕获周期,但不在链接内部,javascript,regex,Javascript,Regex,我在这个优秀的网站上搜索了彻底的解决方案和可能导致解决方案的片段,但没有结果 这是我得到的最接近的结果: (?!(\b[\w]+:\/\/.*?))\B\w+\. 在此代码段中,以下是一些带有URL的示例文本:http://stackoverflow.com. 但我更愿意选择URL之外的时段。正在进行以下捕获: tackoverflow. om. hough. 我只想要URL后面的句点和句子中的最后一个句点。我使用的是JavaScript,所以我无法访问负面的lookbehind(这看起来

我在这个优秀的网站上搜索了彻底的解决方案和可能导致解决方案的片段,但没有结果

这是我得到的最接近的结果:

(?!(\b[\w]+:\/\/.*?))\B\w+\.
在此代码段
中,以下是一些带有URL的示例文本:http://stackoverflow.com. 但我更愿意选择URL之外的时段。
正在进行以下捕获:

  • tackoverflow.
  • om.
  • hough.

我只想要URL后面的句点和句子中的最后一个句点。我使用的是JavaScript,所以我无法访问负面的lookbehind(这看起来很有用,但也许有一天我们会得到它们)。

你应该能够使用正面的lookbehind来断言在你的经期之后是空格还是下线

\.(?=\s|$)

  • \。
    匹配文字句点
  • (?=…)
    是一个积极的前瞻,它将断言在您的经期之后出现空格
    \s
    或下线
    $
    。URL中永远不会出现这种情况,这就是它工作的原因
如果你想减少限制,你可以用任何非字母数字字符代替空格。这里有一个替代方案:

/\.(?=[^a-z0-9]|$)/igm

您可以使用以下表达式:
([\w]+:\/\/[^\s]+)([\.](?=\s |$)

将URL减去句点装饰为标记超链接的示例:

const expression=/([\w]+:\/\/[^\s]+)([\.](?=\s\$)/g;
常量输入=`http://stackoverflow.com.
在此代码段中,有一些带有URL的示例文本:http://stackoverflow.com. 不过我更喜欢选择URL之外的句点。
http://stackoverflow.com`;
const output=input.replace(表达式,(match,url,period)=>`[${url}](${url})${period}`);

控制台日志(输出)
您想要什么匹配,还是只要最后匹配的字符是
而不是URL中的字符,您就不在乎?(例如,匹配
om.
和不匹配
com.
似乎很奇怪,这真的可以吗?)如果你的句子格式正确,那么句点后面应该始终有空格,如果它不在URL中,则下线锚定
$
。除非您匹配的是分数或类似的东西。@当然,我需要句点,但如果它在链接/url中匹配就不需要。@K.Dᴀᴠɪ这是一个很好的观点,我在正则表达式的末尾添加了
\s
,但我仍然存在上述捕获的问题。您到底想捕获什么?只有句号,没有别的吗?我不知道你之前的评论是用你的替换我做的整个正则表达式。好的,这很完美,谢谢。@NetOperatorWibby The
\(?=\s |$)
不完美,因为在前瞻中进行了更改<代码>\(?!\S)非常完美。与
\.(?=[^a-z0-9]|$)
相同,它必须写为
\.(?![a-z0-9])