Regex在javascript中查找特定字符串
regex to find specific strings in javascript
免责声明-对正则表达式绝对陌生....
我有一个像这样的字符串:
subject=something||x-access-token=something
为此,我需要提取两个值。Subject
和x-access-token
.
作为起点,我想收集两个字符串:subject=
和x-access-token=
。下面是我所做的:
/[a-z,-]+=/g.exec(mystring)
它只返回一个元素subject=
。我以为他们俩都会来。我哪里做错了?
g
修饰符不影响exec
,因为exec
只根据规格返回第一个匹配。您需要的是match
方法:
mystring.match(/[a-z,-]+=/g)
不需要正则表达式。写一个小解析器,这很容易。
function parseValues(str) {
var result = {};
str.split("||").forEach(function (item) {
var parts = item.split("=");
result[ parts[0] /* key */ ] = parts[1]; /* value */
});
return result;
}
使用var obj = parseValues("subject=something||x-access-token=something-else");
// -> {subject: "something", x-access-token: "something-else"}
var subj = obj.subject;
// -> "something"
var token = obj["x-access-token"];
// -> "something-else"
当涉及的转义模式允许您在值中包含||
,或者当值可以包含=
时,会出现额外的复杂性。
使用regex方法也会遇到这些复杂问题,但是使用基于解析器的方法,它们将更容易解决。
您必须执行两次exec
才能获得2个提取的字符串。
根据MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
如果您的正则表达式使用"g"标志,您可以多次使用exec()方法来查找同一字符串中的连续匹配。
通常,人们使用while
循环逐个提取与模式匹配的所有字符串。请在浏览器控制台中执行以下代码,看看它是如何工作的。
var regex = /[a-z,-]+=/g;
var string = "subject=something||x-access-token=something";
while(matched = regex.exec(string)) console.log(matched);
您可以将字符串转换为有效的JSON字符串,然后解析它以检索包含预期数据的对象。
var str = 'subject=something||x-access-token=something';
var obj = JSON.parse('{"' + str.replace(/=/g, '":"').replace(/'|'|/g, '","') + '"}');
console.log(obj);
我认为这里不需要正则表达式,只需使用javascript内置函数"split"。
var s = "subject=something1||x-access-token=something2";
var r = s.split('||'); // r now is an array: ["subject=something1", "x-access-token=something2"]
var i;
for(i=0; i<r.length; i++){
// for each array's item, split again
r[i] = r[i].split('=');
}
最后得到如下的矩阵:
y x 0 1
0 subject something1
1 x-access-token something2
可以使用x和y访问元素:
"subject" == r[0][0]
"x-access-token" == r[1][0]
"something2" == r[1][1]
如果您真的想使用纯regexp:
var input = 'subject=something1||x-access-token=something2'
var m = /subject=(.*)'|'|x-access-token=(.*)/.exec(input)
var subject = m[1]
var xAccessToken = m[2]
console.log(subject);
console.log(xAccessToken);
但是,将它分开可能会更简洁:
console.log('subject=something||x-access-token=something'
.split(/'|'|/)
.map(function(a) {
a = a.split(/=/);
return { key: a[0], val: a[1] }
}));
相关文章:
- 在字符串中查找所有图像 src URL 并存储在数组中
- 用于查找子字符串的Regex
- 遍历DOM查找字符串有时会正确返回
- Javascript Regex,在字符串中查找数字
- 使用Regex查找URL中的特定字符串
- 在数组中查找某些字符串(Javascript)
- 查找并替换特定字符串
- 在从索引位置返回的字符串中查找空白
- 使用捕获组查找和替换json字符串中出现的所有短语
- 在Javascript中查找子字符串,并前置/附加一些字符
- 查找字符串及其索引中的最大数字
- 使用正则表达式查找字符串中的不匹配字符
- 如何更改字符串的查找方法
- 修复了如何在容器中查找和替换字符串的功能
- 通过包含的字符串查找对象
- 使用var和字符串查找文件夹
- 搜索字符串查找名称,并使用for循环记录每次出现的名称
- 二进制字符串查找
- 使用jquery和HTML字符串查找每个链接
- 按字符串查找对象索引