我想使用RegExp构造函数对一个字符串运行正则表达式,并获得匹配项和剩余的字符串。以上是为了能够实现下面的UI模式:
如图所示,我需要将匹配与字符串的其余部分分离,以便能够单独应用某种样式或任何其他过程。
/** * INPUT * * input: 'las vegas' * pattern: 'las' * * * EXPECTED OUTPUT * * match: 'las' * remaining: 'vegas' */
vwoqyblh1#
获取匹配项,然后用字符串中的空值替换匹配项,并返回两个结果。
function matchR(str, regex){ // get the match var _match = str.match(regex); // return the first match index, and the remaining string return {match:_match[0], remaining:str.replace(_match, "")}; }
lyfkaqu12#
下面是一个函数,它将用户输入和要匹配的字符串数组作为参数,并返回数组的数组:
const strings = [ 'Las Cruces', 'Las Vegas', 'Los Altos', 'Los Gatos', ]; function getMatchAndRemaining(input, strings) { let escaped = input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); let regex = new RegExp('^(' + escaped + ')(.*)$', 'i'); return strings.map(str => { return (str.match(regex) || [str, '', str]).slice(1); }); } //tests: ['l', 'las', 'los', 'x'].forEach(input => { let matches = getMatchAndRemaining(input, strings); console.log(input, '=>', matches); });
一些注意事项:
2条答案
按热度按时间vwoqyblh1#
获取匹配项,然后用字符串中的空值替换匹配项,并返回两个结果。
lyfkaqu12#
下面是一个函数,它将用户输入和要匹配的字符串数组作为参数,并返回数组的数组:
一些注意事项: