javascript正则表达式反斜杠问题

时间:2017-01-03 18:24:15

标签: javascript regex regex-lookarounds

我试图想出一个捕获以下内容的正则表达式:

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

或者可能使用双反斜杠:

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

并且会产生:

  

一个

     

一个\。二

     

一个\。二\。三

甚至更好,消除反斜杠:

  

一个

     

one.two

     

one.two.three

但我不确定如何寻找一段时间,但却忽略了一个落后于反斜杠的时期。

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

myObject.one.one_two.one_two_three

这很容易,但我的对象级别名称中包含句号字符 所以我试图按句号拆分字符串,而不是反斜杠

我希望这是有道理的。非常感谢你们。

1 个答案:

答案 0 :(得分: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, '.')删除反斜杠。