javascript - 如何用正则表达式匹配JS中后面的字符串,但不包括单词字符?

标签 javascript regex string

我正在对 url 字符串执行域验证和输入屏蔽,并尝试使用正则表达式替换从 url 中删除协议(protocol)和路径。目前,我按顺序使用两个替换函数:一个用于替换协议(protocol),另一个用于删除第一个 / 及其后面的所有内容。

const stripProtocol = val.replace(/(^\w+:|^)\/\//, '');
const stripPath = stripProtocol.replace(/\w\/(.*)/, '');

// http://stackoverflow.com ==> stackoverflow.com
// http://stackoverflow.com/question/ask ==> stackoverflow.co

第一个正则表达式工作完美,但我遇到了两个问题。首先,分配给 stripPath 变量的匹配正则表达式还会删除紧邻第一个斜杠之前的/w 字符。其次,此验证针对输入字段掩码,这意味着它会在每次击键时执行,然后用精简的值替换用户的输入。因此,我不能简单地匹配第二个正则表达式中第一次出现的 / ,因为当用户开始键入以协议(protocol)开头的 url 时,例如 http://,协议(protocol)斜线之后的所有内容都将被删除。我尝试了此 answer 中提到的替代方案的外观变化。 ,但运气不佳。

最佳答案

你已经很接近了!您可以使用正则表达式捕获组获得您正在寻找的结果。

const stripPath = stripProtocol.replace(/(\w)\/(.*)/, '$1');

捕获组(用括号表示)的正则表达式会记住它们匹配的内容。通过 Javascript 的替换,您可以插入这些匹配项。

在您的示例中,'http://stackoverflow.com/question/ask'.replace(/(\w)\/(.*)/, '$1') 匹配 m/question/ask 并将其替换为 m

关于javascript - 如何用正则表达式匹配JS中后面的字符串,但不包括单词字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48027401/

相关文章:

c - c中正则表达式在strcmp函数中的使用

python - 贪婪的正则表达式每第 n 行拆分 python

c++ - 将字符 move 到字符串中会使迭代器无效吗?

javascript - 如何将字符代码传递给jquery插件

javascript - 私有(private)菜单,大小灵活

javascript - 使用动态 DOM 通过 keyup 将 .val 添加到右侧输入

c# - 我如何不允许特殊字符,但在正则表达式中允许空格?

c++ - 对于 C++ 字符串 s,s[s.size()] 是否合法且始终等于 '\0'?

java - Java中证明一个数是否能被5整除的正则表达式

javascript - 将表单操作作为整个 url 发送而不破坏