正则表达式,获取“?”之间的所有数据

Posted

技术标签:

【中文标题】正则表达式,获取“?”之间的所有数据【英文标题】:Regex, get all data between "?" 【发布时间】:2016-04-29 04:47:57 【问题描述】:

我有一些带有 url 数据的字符串

http://www.abc.xyz?data1?data2?data3?data4?data5

我正在寻找将数据保存在数组、对象或 4 个不同字符串中的正则表达式或函数。在javascript中。

找到/\?(.*?)\?/g,但它不能正常工作...

【问题讨论】:

添加正则表达式使用方式的完整代码。 window.location.search.split("?").slice(1) 使用查询字符串的奇怪方式...大多数人会使用名称、值对。 这个网址看起来很奇怪,你的键盘上没有& 字符吗? 介于两者之间还是之后? data5 不在“?”之间它会在需要的输出中吗? \?([^?]*)(?=\?) 如果你想使用正则表达式 【参考方案1】:

使用拆分:

var url = 'http://www.abc.xyz?data1?data2?data3?data4?data5';
var pieces = url.split('?');
// drop the url part
pieces.shift();
// show result
document.write(pieces);

但是,请务必注意,url 查询字符串由& 分隔,因此您更有可能:

var url = 'http://www.abc.xyz?data1=foo&data2=bar&data3=baz&data4=etc&data5=etc';

您可以将其解析出来,但使用 location.search 会更容易,它会返回一个查询字符串值数组。

【讨论】:

【参考方案2】:

如果你想使用正则表达式,你可以试试这个:

//The regex will not get the fifth data, the question says, and i quote
//´Regex, get all data BETWEEN“?”´ you can remove the lookahead (?=\?) if you want all data
var re = /\?([^?]*)(?=\?)/g; 
var str = 'http://www.abc.xyz?data1?data2?data3?data4?data5';
var m;

while ((m = re.exec(str)) !== null) 
    if (m.index === re.lastIndex) 
        re.lastIndex++;
    
// View your result using the m-variable.
// eg m[0] etc.

Demo

【讨论】:

"/\?([^?]*)(?=\?)/g" - 真的吗?你测试了吗?这里有两个问题。一个很关键。 这是一个 regex 演示。这是一个 code demo 显示它不起作用 => Uncaught TypeError: re.exec is not a function。请修复。 好,现在看看\?([^?]*)(?=\?)——什么是多余的? 前瞻? (但是,他的 OP 说介于两者之间?所以不应该考虑正确的数据),非常感谢整改,但是,为什么正则表达式在两个站点中的工作方式不同?排除(对不起我的英语)“演示中的相同正则表达式捕获4个数据,而在代码演示中它只捕获data4,最后一个 好的,这里是我不明白问题的地方。如果最后的? 必须在那里,那么你真的需要前瞻。如果需要第一个 ? 之后的所有部分,则应删除前瞻。请参阅this demo 和other demo。

以上是关于正则表达式,获取“?”之间的所有数据的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:获取两个字符之间的字符串

php正则表达式获取两个字符之间的文字

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

如何获取字符串中所有出现的 Ruby 正则表达式的匹配数据?

使用正则表达式获取用换行符分隔的单词之间的文本

正则表达式在Javascript中获取括号之间的字符串