获取每个'单词'在使用regex的Javascript字符串中的每个下划线之后
Getting each 'word' after every underscore in a string in Javascript using regex
我想提取Javascript字符串中下划线后面的每个字母数字字符块。我目前使用字符串方法和正则表达式的组合来工作,如下所示:
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"]
我想知道是否有一种纯粹使用regex的方法?我管理过的最好的是:
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>";
请注意,使用带有用全局修饰符/g
定义的正则表达式的string#match()
将丢失所有捕获的文本,这就是为什么不能只使用str.match(/_([^_]+)/g)
的原因。
由于JS中不支持lookbehind
,我唯一能想到的方法就是使用这样的组。
Regex:_([^_]+)
和使用'1
或$1
的捕获组。
Regex101演示
var myString = "ignore_firstMatch_match2_thirdMatch";
var myRegexp = /_([^_]+)/g;
match = myRegexp.exec(myString);
while (match != null) {
document.getElementById("match").innerHTML += "<br>" + match[0];
match = myRegexp.exec(myString);
}
<div id="match">
</div>
使用lookahead
的另一种方式是这样的。
但在JS中需要很长时间。三次杀死我的页面。将是一个很好的ReDoS漏洞
Regex:(?=_([A-Za-z0-9]+))
和使用'1
或$1
的捕获组。
Regex101演示
为什么您认为需要regex?一个简单的拆分就可以完成任务:
string str = "ignore_firstMatch_match2_thirdMatch";
IEnumerable<string> matches = str.Split('_').Skip(1);
相关文章:
- 将DOM节点值与字符串Javascript进行比较
- 到UpperCase字符串Javascript中的特定字符索引
- 替换字符串javascript中的所有特殊字符..
- 在数组中查找某些字符串(Javascript)
- 解析特定的字符串Javascript(Node.js)
- 从字符串 JavaScript 中过滤多个正则表达式
- 在字符串 JavaScript 中使用正则表达式替换
- 忽略字符串javascript中的字符
- 如何检查url是否包含多个字符串.Javascript/jquery
- 截断字符串JavaScript
- 计算字符串javascript中的某些单词
- 从'获取本月的最后一天;2015-02-23'字符串(javascript)
- 从字符串javascript中获取键值对
- 从路径字符串 - Javascript 获取所有父路径
- 在字符串Javascript中查找丢失的字母
- AngularJS:如何使所有ng模型都是字符串.JavaScript和长整数
- 将浮点转换为至少有一个小数点的字符串(javascript)
- 替换字符串 JavaScript 中的多个文本
- 检查另一个字符串 JavaScript 中一个字符串是否有任何字符的最佳方法
- 将变量的值包含在 href 字符串 javascript 中