使用JavaScript提取由数字独立的双引号括起来的子字符串

时间:2016-03-21 11:52:03

标签: javascript regex

我有大量数据需要使用JavaScript提取双引号括起来的最后一个字符串。每个文本都如下所示:

  

有些文字有些文字有些文字“有些引用”有些文字

或者这个

  

有些文字“引用”一些文字“和一些引用”

或者为什么不喜欢这个

  

有些文字“有些文字”有些引用“有些文字

等等。

正如您所看到的,问题在于缺乏数据集的可预测性,我无法解决这个问题。 我的进步只能提取第一个保证:

$( $("[id^=node-]") ).each(function() {

  var string = $(this).next().text();
  array = string.match(/"([^"]+)"/);

});

4 个答案:

答案 0 :(得分:2)

您可以在模式后使用正向前瞻(?=[^"]*$),以确保只匹配最后一对引号:

var s = ["some text some text some text \"some quote\" some text", "Some text \"some quote\" some text \"and some quote\"", "Some text \" some text \"some quote\" some text"];
var res = s.map(r => (m = r.match(/"([^"]*)"(?=[^"]*$)/)) ? m[1] : "");
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";

这是regex demo

模式细分:

  • " - 匹配双引号
  • ([^"]*) - 匹配并捕获双引号之间的内容,因为[^"]*匹配除双引号之外的任何0+字符
  • " - 双引号
  • (?=[^"]*$) - 如果在最后一个匹配的"右侧某个地方有一个双引号,直到字符串的结尾(换句话说,不需要"),则匹配失败直到字符串的结尾)。

对于那些认为前瞻是一种矫枉过正的人来说,另一个正在使用的正则表达式应该是

/"([^"]*)"[^"]*$/

var s = ["some text some text some text \"some quote\" some text", "Some text \"some quote\" some text \"and some quote\"", "Some text \" some text \"some quote\" some text"];
var res = s.map(r => (m = r.match(/"([^"]*)"[^"]*$/)) ? m[1] : "");
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";

说明是相同的,但是前瞻变成了一个消费子模式[^"]*$,它实际上匹配(并消耗字符)除"之外的所有0+符号,直到字符串结尾。

答案 1 :(得分:1)

添加g属性:

array = string.match(/"([^"]+)"/g);

全球搜索。

看到它正常工作:

https://regex101.com/r/dM8gQ6/1

答案 2 :(得分:1)

如果正则表达式不是授权,请尝试

    var someText = 'some text some text some text "some quote" some text';
    var matchedItems = someText.split("\"").filter(function(value,index){if (index%2==1) return true});

&#13;
&#13;
var someText = 'Some text "some quote" some text "and some quote"';
    var matchedItems = someText.split("\"").filter(function(value,index){if (index%2==1) return true});
    document.body.innerHTML += JSON.stringify(matchedItems, 0, 4);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

对于某些人来说,前瞻是他们试图在每个钉子上砸的锤子。

查找最后引用的字符串:

/"([^"]*)"[^"]*$/
 ^^^^^^^^^              STRING WITH QUOTES
   ^^^^^                STRING WITHOUT QUOTES (CAPTURING THIS)
          ^^^^^         OTHER STUFF WITHOUT QUOTES
               ^        END OF STRING