正则表达式,选择其他内容的一部分文本

时间:2015-12-20 13:53:19

标签: javascript c# regex

我对下一个任务有点无能为力。我想在"之间选择一个文字。它在标签里面但不在标签之外,即。在另一个选择中选择。

我有下一个标签:< |和|>我只想在"之间选择一个文本。以及标签之间。

< | blah blah blah" 应该被选中"未选择" 也选择它 " |> "未选择"

我想一些关于

的事情
barcodeNum

但它没有用。

3 个答案:

答案 0 :(得分:6)

我已经使用两个正则表达式来正确匹配。

var input = '<|a "b"|>c "d"ef<|"g"h "i"|>"j"k l';
var output=input.match(/<\|(.*?)\|>/g)
   .map(function(x){return x.match(/"(.*?)"/g)})
alert(output)

如您所见,正确匹配“b”,“g”,“i”。

原则:

  1. 查找<||>
  2. 之间的所有文字匹配项
  3. 对于第一步中的每个匹配,找到两个引号之间的文本匹配。
  4. (使用second answer问题中linked的正则表达式)

答案 1 :(得分:3)

I can't think of a regular expression to match what you want in one shot但是我没有看到不使用两个正则表达式的原因:

&#13;
&#13;
var SAMPLE_STRING = '<| blah blah blah "should be selected" not selected "select it too" |> "not selected too" <| "select it" do not select this |> "don\'t select this one too"';

var matchAll = function matchAll(regexp, str) {
  var lastIndex = regexp.lastIndex;
  regexp.lastIndex = 0;
  var result = [];
  var match;
  while ((match = regexp.exec(str)) !== null) {
    result.push(match[0]);
  }
  regexp.lastIndex = lastIndex; // so this method won't have any side effects on the passed regexp object
  return result;
};

var withinTagsRegexp = /<\|([^|]|\|[^>])+\|>/g;
var withinQuotesRegexp = /"[^"]+"/g;

var withinTagsAndQuotes = [].concat.apply([], // flattens the following
    matchAll(withinTagsRegexp, SAMPLE_STRING).map(
    matchAll.bind(undefined, withinQuotesRegexp)));

// show the result

var resultTag = document.getElementById('result');

withinTagsAndQuotes.forEach(function(entry) {
  var p = document.createElement('p');
  p.innerHTML = entry;
  resultTag.appendChild(p);
});
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:2)

尝试使用后视和前瞻:

(?<=\<\|.)(\"[^"]*\")(?=.\|\>)

Regular expression visualization

这里是live demo