如何匹配以下字符串,但不包括JS中的单词字符与正则表达式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何匹配以下字符串,但不包括JS中的单词字符与正则表达式?相关的知识,希望对你有一定的参考价值。
我正在对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中提到的替代背后的变化,但没有运气。
答案
你非常接近!您可以使用正则表达式捕获组获得您正在寻找的结果。
const stripPath = stripProtocol.replace(/(w)/(.*)/, '$1');
捕获组的正则表达式(用括号表示)记住它们匹配的内容。使用javascript替换,您可以插入这些匹配。
在你的例子中,'http://stackoverflow.com/question/ask'.replace(/(w)/(.*)/, '$1')
匹配m/question/ask
并用m
替换它。
以上是关于如何匹配以下字符串,但不包括JS中的单词字符与正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?