我正在对 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/