JavaScript正则表达式提取字符串的不同部分

时间:2013-02-25 11:20:58

标签: javascript regex match regex-negation

这是一个有趣的 - 我正在寻找一个JavaScript正则表达式解决方案从字符串中提取不同的部分。任何输入都非常感谢。

示例 -

";1XYZ123_UK;1;2.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0;fly;0;0;;;"

我试图从字符串中提取这些位而忽略其余位 -

“1XYZ123_UK;2;3;1XYZ456_UK;4;5.6;”

基本上从1XYZ开始提取任何东西,直到它遇到'evt'。

3 个答案:

答案 0 :(得分:1)

var s= ";1XYZ123_UK;1;2.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0"

s = s.replace(/(evt.+?(?:\||;|$))/g, "");

console.log(s) // ";1XYZ123_UK;1;2.3;1XYZ456_UK;4;5.6;"

答案 1 :(得分:1)

var s = ';1XYZ123_UK;1;2e.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0';
var r = s.match(/1XYZ((?!evt).)*/g);

会给你想要的字符串:

["1XYZ123_UK;1;2e.3;", "1XYZ456_UK;4;5.6;"]

答案 2 :(得分:0)

使用组((...))捕获匹配字符串的部分内容。成功匹配后,可以通过String.matchRegex.exec返回的数组访问捕获的子字符串。

数组的第一个元素(索引0)是整个匹配,下一个(索引1)是第一个捕获。

例如

var re = /1XY(.*)evt/
var result = theString.match(re)

然后,如果匹配(result不为空)则

result[0]

将是整个匹配(从1XY开始到evt结束)

result[1]

将是这些字符串之间的文本。