有没有办法在Java中的regex match()结果的字符串中检索(起始)字符位置?
exec
返回具有index
属性的对象:
var match = /bar/.exec("foobar");
if (match) {
console.log("match found at " + match.index);
}
对于多个匹配项:
var re = /bar/g,
str = "foobarfoobar";
while ((match = re.exec(str)) != null) {
console.log("match found at " + match.index);
}
这是我想出的:
// Finds starting and ending positions of quoted text
// in double or single quotes with escape char support like \" \'
var str = "this is a \"quoted\" string as you can 'read'";
var patt = /'((?:\\.|[^'])*)'|"((?:\\.|[^"])*)"/igm;
while (match = patt.exec(str)) {
console.log(match.index + ' ' + patt.lastIndex);
}
来自developer.mozilla.org文档的String.match()
方法:
返回的Array具有额外的input属性,其中包含已解析的原始字符串。此外,它还具有index属性,该属性表示string中匹配项的从零开始的索引。
当处理非全局正则表达式时(即,g
正则表达式上没有标志),返回的值.match()
具有index
属性...您要做的就是访问它。
var index = str.match(/regex/).index;
这是一个显示它也正常工作的示例:
var str = 'my string here';
var index = str.match(/here/).index;
alert(index); // <- 10
回到IE5,我已经成功进行了测试。
您可以使用对象的search
方法String
。这仅适用于首场比赛,否则将按照您的描述进行。例如:
"How are you?".search(/are/);
// 4
在现代浏览器中,您可以使用string.matchAll()完成此操作。
与@Gumbo的答案中RegExp.exec()
一样,此方法vs的好处是它不依赖于正则表达式是有状态的。
let regexp = /bar/g;
let str = 'foobarfoobar';
let matches = [...str.matchAll(regexp)];
matches.forEach((match) => {
console.log("match found at " + match.index);
});
这是我最近发现的一个很酷的功能,我在控制台上尝试了一下,它似乎起作用了:
var text = "border-bottom-left-radius";
var newText = text.replace(/-/g,function(match, index){
return " " + index + " ";
});
其中返回:“边界6底13左18半径”
所以这似乎是您要寻找的。
该成员fn返回String对象内输入单词的从0开始的位置数组(如果有)
String.prototype.matching_positions = function( _word, _case_sensitive, _whole_words, _multiline )
{
/*besides '_word' param, others are flags (0|1)*/
var _match_pattern = "g"+(_case_sensitive?"i":"")+(_multiline?"m":"") ;
var _bound = _whole_words ? "\\b" : "" ;
var _re = new RegExp( _bound+_word+_bound, _match_pattern );
var _pos = [], _chunk, _index = 0 ;
while( true )
{
_chunk = _re.exec( this ) ;
if ( _chunk == null ) break ;
_pos.push( _chunk['index'] ) ;
_re.lastIndex = _chunk['index']+1 ;
}
return _pos ;
}
现在尝试
var _sentence = "What do doers want ? What do doers need ?" ;
var _word = "do" ;
console.log( _sentence.matching_positions( _word, 1, 0, 0 ) );
console.log( _sentence.matching_positions( _word, 1, 1, 0 ) );
您还可以输入正则表达式:
var _second = "z^2+2z-1" ;
console.log( _second.matching_positions( "[0-9]\z+", 0, 0, 0 ) );
这里得到线性项的位置索引。
var str = "The rain in SPAIN stays mainly in the plain";
function searchIndex(str, searchValue, isCaseSensitive) {
var modifiers = isCaseSensitive ? 'gi' : 'g';
var regExpValue = new RegExp(searchValue, modifiers);
var matches = [];
var startIndex = 0;
var arr = str.match(regExpValue);
[].forEach.call(arr, function(element) {
startIndex = str.indexOf(element, startIndex);
matches.push(startIndex++);
});
return matches;
}
console.log(searchIndex(str, 'ain', true));
function trimRegex(str, regex){
return str.substr(str.match(regex).index).split('').reverse().join('').substr(str.match(regex).index).split('').reverse().join('');
}
let test = '||ab||cd||';
trimRegex(test, /[^|]/);
console.log(test); //output: ab||cd
要么
function trimChar(str, trim, req){
let regex = new RegExp('[^'+trim+']');
return str.substr(str.match(regex).index).split('').reverse().join('').substr(str.match(regex).index).split('').reverse().join('');
}
let test = '||ab||cd||';
trimChar(test, '|');
console.log(test); //output: ab||cd
本文地址:http://javascript.askforanswer.com/fanhuizhengzebiaodashimatchzaijavascriptzhongdeweizhi.html
文章标签:javascript , match , regex , string-matching
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
文章标签:javascript , match , regex , string-matching
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!