【问题标题】:javascript regex backslash issuejavascript正则表达式反斜杠问题
【发布时间】:2017-01-03 18:24:15
【问题描述】:

我正在尝试提出一个捕获以下内容的正则表达式:

var testString = "one . one\.two . one\.two\.three" ;
testString.match(/(\\\.)|([^\.\[\]\s]+)/g  );

或者可能使用双反斜杠:

var testString = "one . one\\.two . one\\.two\\.three" ;
testString.match(/(\\\.)|([^\.\[\]\s]+)/g  );

并且会产生:

一个

一个\.两个

一\.二\.三

或者更好的是,消除反斜杠:

一个

一二

一二三

但我不确定如何查找句点,但又忽略了反斜杠后面的句点。

换句话说,我正在尝试手动构建对象路径。如果路径看起来像这样:

myObject.one.one_two.one_two_three

这很容易,但我的对象级别名称中包含句点字符。
所以我试图用句点没有反斜杠来分割一个字符串。

我希望这是有道理的。非常感谢大家。

【问题讨论】:

  • 原始字符串中的反斜杠仅出现在您的符号中,而不是实际字符串中。无论您是否将它们从原始字符串表示法中删除,它都是相同的字符串。所以没有办法检测你的符号中是否有反斜杠。如果你想在你的字符串中使用它们,你需要在你的符号中加倍它们。
  • testString.split(/\s+\.\s+/) 有问题吗?然后删除反斜杠(如果它们是物理反斜杠),.map(x => x.replace("\\", "")?顺便说一句,您在帖子标题中提到反向引用是否有某些原因?另外,小问题,但是String() 这里的目的是什么?
  • 正如@trincot 指出的那样,您必须区分在字符串文字中使用反斜杠来转义字符和字符串中的实际反斜杠。字符串文字符号var testString = "one . one\.two . one\.two\.three" ; 产生一个字符串one . one.two . one.two.three。字符串文字符号var testString = "one . one\\.two . one\\.two\\.three" ; 产生一个字符串one . one\.two . one\.two\.three,其中反斜杠是字符串值中的实际反斜杠字符..
  • 我正在修改现有代码,因此大部分内容只是剪切/粘贴 - 您的地图建议效果很好(非常小的调整):.map(x => x.replace(/\\/g, ""));

标签: javascript regex regex-lookarounds


【解决方案1】:

如果您希望原始文本中包含文字反斜杠,则需要在文字字符串表示法中对其进行转义,如下所示:

var testString = "one . one\\.two . one\\.two\\.three" ;

我会假设这是你想要的。

如果部分总是用空格-点-空格分隔,那么用它来分割字符串会更容易。

如果这不适合你(你的一般模式并不总是这样和/或你真的需要它是一个正则表达式),你可以使用你的正则表达式的这个变体:

/(\\\.|[^\s\.\\])+/g

var testString = "one . one\\.two . one\\.two\\.three" ;
console.log('input:', testString);

var result = testString.match(/(\\\.|[^\s\.\\])+/g);

// Show result:
for (var match of result) {
    console.log('output:', match);
}

之后您可以在上面的代码中使用match.replace(/\\\./g, '.') 删除反斜杠。

【讨论】:

  • 谢谢。不是吹牛,但我的答案非常接近。 space-dot-space 只是为了使其更具可读性。
  • 确实,你很接近。 ;-)
猜你喜欢
  • 2012-06-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多