我想提取 Javascript 字符串中下划线之后的每个字母数字字符 block 。我目前使用字符串方法和正则表达式的组合来工作,如下所示:
var string = "ignore_firstMatch_match2_thirdMatch";
var firstValGone = string.substr(string.indexOf('_'));
// returns "_firstMatch_match2_thirdMatch"
var noUnderscore = firstValGone.match(/[^_]+/g);
// returns ["firstMatch", "match2" , "thirdMatch"]
我想知道是否有一种方法可以完全使用正则表达式来做到这一点?我管理过的最好的是:
var string = "ignore_firstMatch_match2_thirdMatch";
var matchTry = string.match(/_[^_]+/g);
// returns ["_firstMatch", "_match2", "_thirdMatch"]
但这也会返回前面的下划线。鉴于你不能在 JS 中使用 lookbehinds 我不知道如何匹配后面的字符,但排除下划线本身。这可能吗?
最佳答案
您可以使用捕获组 (_([^_]+)
) 并使用 RegExp#exec
在循环中同时将捕获的值插入数组:
var re = /_([^_]+)/g;
var str = 'ignore_firstMatch_match2_thirdMatch';
var res = [];
while ((m = re.exec(str)) !== null) {
res.push(m[1]);
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
请注意,使用 string#match()
使用全局修饰符 /g
定义的正则表达式将丢失所有捕获的文本,这就是为什么你不能只使用 str.match(/_([^_]+)/g)
.
关于javascript - 使用正则表达式在 Javascript 中的字符串中的每个下划线之后获取每个 'word',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209589/