文本组件react-native-如何转义换行符,但通过将/ n转义为// n来显示/ n

时间:2019-07-03 23:10:22

标签: javascript reactjs react-native

我正在使用Text react-native组件为我的应用制作标签。我希望能够将所有\n变成一个实际的换行符,但是如果我像这样\n

进行转义,则可以在我的Text组件中显示\\n

我已经尝试了很多方法,但是似乎无法使其正常运行,包括用尝试的转义配置进行替换,replaceAll 当前代码段:

const textCustomSetter = (newValue, newComponent) => {
    newComponent.properties.Text = newValue;
    newComponent.properties.children = newValue.split('\\n').join('\n');
};

其中textCustomSetter是我的Text组件的设计和运行时设置程序属性。

这可以正确捕获\n并将其转换为换行符,但将\\n转换为\后再换行。

2 个答案:

答案 0 :(得分:2)

只需replace并使用正则表达式即可:

newValue.replace(/[^\\]\\n/g, "\n");

这是通过 not 匹配单个反斜杠,然后匹配文字\n(例如,反斜杠和n,而不是换行符)并替换用换行符。

答案 1 :(得分:0)

我相信我已经知道了。这会将\ n变成换行符,并将所有2个或更多斜杠后跟一个n的字符串减少到一个斜杠。我知道这是一个非常具体的规范,但我想分享一下如何使它起作用。感谢您的帮助,让我不再对正则表达式感到困惑!

现在,我只需要弄清楚语法就可以在前端工作。

class func getCurrentReceipt(db: Database) throws -> Ledgers {
        if let cr = FoodyDataStack.thisDataStack._currentReceipt {
            return cr
        }
        // Fall through
        do {
            if let cr = try Ledgers.filter(Ledgers.Columns.receiptClosed == ReceiptStatus.receiptOpen.rawValue).order(Ledgers.Columns.dateModified.desc).fetchOne(db) {
                FoodyDataStack.thisDataStack._currentReceipt = cr
                return cr
            } else {
                throw FoodyDataStack.myGRDBerrors.couldNotFindCurrentReceipt
            }
        } catch FoodyDataStack.myGRDBerrors.couldNotFindCurrentReceipt {
            // Create new receipt with default store
            let newReceipt = Ledgers()
            newReceipt.dateCreated = Date()
            newReceipt.dateModified = Date()
            newReceipt.receiptStatus = .receiptOpen
            newReceipt.receiptUrgency = .immediate
            newReceipt.dateLedger = Date()
            newReceipt.uuidStore = Stores.defaultStore(db).uuidKey
            FoodyDataStack.thisDataStack._currentReceipt = newReceipt
            return newReceipt
        } catch  {
            NSLog("WARNING: Unhandled error in Ledgers.getCurrentReceipt() \(error.localizedDescription)")
        }
    }