【问题标题】:Test for / character in between all pairs of opening and closing double quotes [duplicate]测试所有开始和结束双引号之间的 / 字符[重复]
【发布时间】:2015-10-16 12:45:01
【问题描述】:

我正在尝试测试 / 字符是否在 JavaScript 字符串的双引号内。例如,"hello/world" 将匹配,而 hello/world/"How are you" 将失败,因为它在双引号之外。我一直在环顾四周,但没有找到答案。

此外,"hello"world/how"are you" 应该会失败,因为从左到右确定的开始和结束双引号不封装 /。重申一下,我想匹配 within/inside/in between 关闭和打开双引号的所有实例,这与 Alternative to regex: match all instances not inside quotes

不同

【问题讨论】:

  • "hello"world/how"are you" 的结果应该是什么?
  • @Barmar 好问题。这应该通过,因为开始和结束双引号没有封装/,从左到右确定
  • 你应该在问题中澄清这一点,因为有几个答案弄错了。
  • 我认为“匹配”、“失败”和“通过”存在混淆。我已将我的问题编辑得更清楚。

标签: javascript regex


【解决方案1】:
/".*\/.*"/.test(your_string)

参见 JavaScript 正则表达式的 test 方法。

【讨论】:

  • 这将给出"quoted begin" not/quoted "quoted end"的错误答案
  • @Barmar:这不是例子。
  • 是的,我概括了。我猜对了,这应该会通过,请参阅他的评论。
  • @Barmar:很好,你已经阐明了要求:)
  • @Jaromanda X:你的意思是什么?编程任务不是任何可能的输入/输出,而是一个具体的任务(除非你在模仿微软)。
【解决方案2】:

如果不使用正则表达式,算法将类似于...请自行测试!

 Startquotehit = false
    insidequote = false
    Gotaslash = false
    Wantedresult = false

    For x to.. String.length
    {
    If x == quote
    {
     Startquotehit = true;
     Insidequote = !insidequote;
     If gotaslash == true && insidequote
         Wantedresult = true;
    }     

    If x == slash
    {
      If startquotehit
         Gotaslash = true;
    }
 }

Wantedresult 会告诉您斜线是否被引用在“引号内”以涵盖您的错误场景“....”.../...“...”

【讨论】:

  • 为什么要投反对票?是的,比 rexexes 笨拙,但它应该可以工作:)
【解决方案3】:
str = 'hello/world"how are you"';

q1 = str.indexOf('"');
q2 = str.lastindexof('"');
slsh = str.indexOf("/");
if( slsh > q1 && slsh <q2){

    dosomething;
}

【讨论】:

  • 你为什么要编辑它?非常好。
  • 如果您不同意,您可以随时重新编辑或回滚;)。
  • 我更沮丧的是,我得到了 2 次反对票,但对原因没有任何意见。
  • 同意@StillLearningGuy 不赞成投票并不能激励我们帮助分享答案,请让我支持你的...
  • 我猜反对票是因为这不是一个有用的答案。为什么?好吧,考虑一下字符串"hello"world/how"are you" - 你的答案会(错误地)表明'/'在'"'之间 - 就像除 1 之外的所有其他答案一样
【解决方案4】:

我想你可以用这个:

/^(((\"[^"\/]*\")\/?)|([^"\/]*\/?))+$/igm

/^(\"[^"\/]*\"|[^"\/]*\/?)+$/im

[Regex Demo]

【讨论】:

  • 可以简化为/^("[^"\/]*"\/?|[^"\/]*\/?)+$/igm
  • @Gumbo 我简化了它,现在添加了我发现的最好的;)。
  • 这是迄今为止所有答案中效果最好的
猜你喜欢
  • 2015-12-28
  • 2019-06-10
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 2018-12-29
  • 2019-02-13
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多