如何匹配以下字符串,但不包括JS中的单词字符与正则表达式?

问题描述 投票:0回答:1

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

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

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

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

javascript regex string
1个回答
1
投票

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

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

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

在你的例子中,'http://stackoverflow.com/question/ask'.replace(/(\w)\/(.*)/, '$1')匹配m/question/ask并用m替换它。

© www.soinside.com 2019 - 2024. All rights reserved.