【问题标题】:Regex Match String Outside of Quotes, if the quote is incomplete, do not match anything正则表达式匹配引号外的字符串,如果引号不完整,则不匹配任何内容
【发布时间】:2016-03-14 14:23:40
【问题描述】:

我想要的结果:

  1. T1 T3 T5 T8 " = 不匹配,因为引号不完整甚至更好,匹配引号之前的字符
    1a。 T1 T3 T5 T8 "T4 = 匹配 T1 T3 T5,忽略 T4 = 不是要求,但如果也能做到这一点会很好
  2. T1 T3 T5 T8 "T9" = 仅匹配 T1 T3 T5 T8,忽略 T9
  3. O2 T3 O5 "T7 T9" O8 = 匹配 O2 T3 O5 O8,忽略引号内的匹配项

这是我目前的正则表达式,但如果报价不完整,我不能让它与所有内容不匹配。

/(^|\b)(t|o)\d+(?=([^"]*"[^"]*")[^"]*$)/gi

【问题讨论】:

  • 您可以接受非正则表达式解决方案吗?
  • @gurvinder372 仅当这在正则表达式中是不可能的。我有大部分工作,如果引号不完整,我不希望它匹配的部分
  • 如果你只有一个正则表达式,那么一切看起来就像 /^[Nn]ail$/
  • 更新后的“1a”是否与“1”的要求相反?
  • @guest271314 是的,但我不知道这是否可能,所以它不是要求,而是增强。 1a 是可选的。我想要的最基本的事情是如果报价不完整,不要匹配任何东西。

标签: javascript jquery regex expression


【解决方案1】:

对于您发布的内容,请使用此模式

"[^"\r\n]*"|"[^"\r\n]*$|(\w+)

并检查子模式 #1
Demo

【讨论】:

  • 是的,这行得通。我能够通过这个解决方案找到正确的解决方案。我将其稍微编辑为: /"[^"]*"|"[^"]*$|((t|o)\d+)/gi.
【解决方案2】:

试试这个例子:

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

 /([^\"]*)\".*\"([^\"]*)/gi

【讨论】:

  • 好的。我在第一种情况下实现了这一点,但它匹配所有字符串,而不是要求(不匹配任何内容):/([^\"]*)\".*(?!\")([^\"]*)/gi
  • 您能否将实际的字符串匹配与 T 或 O 合并到此中。我尝试通过替换 .* 来编辑您的正则表达式,但它没有用。正则表达式只是我的一大弱点。
  • 是的,你在这里:regex101.com/r/bA7oP0/2([o|t][^\"]*)\".*\"([^\"]*)
  • 我无法替换,因为我需要得到这个职位。因此,我再次查看了您的解决方案并注意到了版本 3。我不确定您是否添加了版本 3,但我将其稍微修改为以下内容: /"[^"\r\n]*"|"[^" \r\n]*$|(\w+)/gm to: /"[^"]*"|"[^"]*$|((t|o)\d+)/gi 我相信这适用于所有案例。
  • 我不做第三个版本,但如果它符合您的要求,请遵循它!
【解决方案3】:

您可以进行两步验证:

a = YourString
a.match(/\"[^\"]+\"/) ? a.replace(/([^\"]*)\".*\"([^\"]*)/,"$1$2") : ""

a='T1 T3 T5 T8 "'
# ""

a='O2 T3 O5 "T7 T9" O8'
# "O2 T3 O5  O8"

a='T1 T3 T5 T8 "T9"'
# "T1 T3 T5 T8 "

更新
要覆盖不需要的情况,只需添加另一个条件

a.match(/\"[^\"]+\"/) ? a.replace(/([^\"]*)\".*\"([^\"]*)/,"$1$2") : a.replace(/([^\"]*)\"[^\"]*/,"$1")

【讨论】:

  • 我喜欢这种方法,但是我在实现时遇到的问题是我需要获取匹配词的索引位置。在替换期间,原始索引关闭,因为变量长度不再匹配替换后文本区域上的内容。我将进一步尝试采用这种方法,并尝试解决我在获取正确索引位置方面的问题。
【解决方案4】:

你可以只做一个replace,然后是一个条件split

// case 1
var str = 'O2 T3 O5 "T7 T9" O8';
var r = str.replace(/\s*"[^"]*"/g, '');
var m;

if (str != r)
   m = r.split(/\s+/);

console.log(m);
//=> ["O2", "T3", "O5", "O8"]

// Case 2
var str = 'O2 T3 O5 "';
var r = str.replace(/\s*"[^"]*"/g, '');
var m;

if (str != r)
   m = r.split(/\s+/);

console.log(m);
//=> undefined

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-13
    • 2014-04-05
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多