javascript - 使用正则表达式在 Javascript 中的字符串中的每个下划线之后获取每个 'word'

标签 javascript regex

我想提取 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/

相关文章:

javascript - Laravel 不会加载我的 javascript 文件

javascript - jquery ajax async false 不起作用

javascript - 如何在javascript中编写正则表达式不允许字符串中出现前导和结尾空格

正则表达式匹配所有 unicode 引号

regex - 分析过滤器 - 包含目录的主机名?

javascript - 如何使用变量名访问表单值?

javascript - Ajax、PHP mysql数据库查询-网络路由

javascript - 如何在 IE8 中转储 JavaScript 变量?

regex - 如何在 Postgres 中存储正则表达式 "literals"?

javascript - 单值的多个正则表达式验证 - 允许特殊字符的字母数字问题