Javascript文本除以标签问题(多行单元格)

时间:2011-05-27 20:20:55

标签: javascript regex arrays split clipboard

我的网页上有一个奇怪的问题,特别是一个文本区域元素,可以从用户那里获取剪贴板。

用户执行CTRL + V;我创建了一个事件来获取事件KeyUp的数据。

......这很好......

但是,当我试图划分这个文本区域的每个“行”时;开始问题...... 输入可以是这样的例子:

excel

数据类似于:

Row1 [0] [HT] Row1 [1] [LF]“Row2 [0]注释行1 [LF]行2 [0]注释行2”[HT]行2 [1]

其中:  [HT]表示{Tab}  [LF]表示{新行}

我用:

var myData = document.getElementById("TextAreaElement").value;
var vArray = myData.split(/\n/);

但是这个阵列让我回到了3行...

debug


有人知道任何解决方案或替代方式吗?

3 个答案:

答案 0 :(得分:0)

您将获得包含三行的文本,将其拆分为换行符并获取包含三个项目的数组。好像它有效。 :)现在,您需要做的是,将每个项目分开并在选项卡上分割(= \t

[编辑]

不,现在我明白了你的意思。你不会通过使用这种分裂来到达那里。你必须解析字符串。字段值可以包含一个输入,在这种情况下,它将用双引号括起来。所以你必须解析字符串,当你仍在一组引号中时,不要将其拆分。

答案 1 :(得分:0)

关于'。'的问题不匹配换行符,在JS中执行该操作的标准方法是[\S\s],它将匹配任何内容。

看起来你想为初学者做的就是用标签分割字符串,对吧?然后...

result = string.split(/\t/)

然后你将有一个数组,每个行的数据是分开的。请注意,这仅适用于您的数据中不能包含额外错误标签的情况。

无论什么工具将信息放入剪贴板,都应该在JS复制并解析之前进行一些转义。如果它不能做到这一点,那么真的有什么事情 - 在这种情况下你不能保证你的字符串不会有双引号,制表符或你可能试图用作分隔符的任何其他字符。

答案 2 :(得分:0)

好吧,我找不到使用正则表达式或javascript方法的方法(我相信可以做到)。我以不同的方式分割信息。

我使用AJAX将此信息发送到服务器并在VB中执行拆分。 简历中:

  1. 我获得了最大列(按标签分割)。

  2. 获取并评估选项卡数组的每个值。

  3. 如果以双引号开头,尝试查找双引号的结尾(在此之前,用唯一文本替换中间双引号)

  4. 每次评估原始数组的项目时,我都删除了每个项目(始终评估项目0)...

  5. 如果找到一个新行(行的最后一行),则只删除上一行“最后一列”的文本。

  6. 我希望能帮助遇到同样问题的人。欢呼声。

    以下是代码:

    Public Function TEST(ByVal pText As String) As String
        Try
            Dim vText As String = pText
    
            Dim vArray As New ArrayList
            vArray.AddRange(vText.Split(vbNewLine))
            Dim vActualIndex As Integer = 0
    
            Dim vMaxColumns As Integer = 0
    
            For Each vArrayItem In vArray
                If vArrayItem.Split(vbTab).Length > vMaxColumns Then
                    vMaxColumns = vArrayItem.Split(vbTab).Length
                End If
            Next
    
            Dim vActualArray(vMaxColumns - 1) As String
            vArray = New ArrayList
            vArray.AddRange(vText.Split(vbTab))
    
            Dim vLen As Integer = vArray.Count
            Dim vNewArray As New ArrayList
    
            vActualIndex = 0
    
            Do While vArray.Count <> 0
                If vArray(0).Split(vbNewLine).Length = 1 Then
                    vActualArray(vActualIndex) = vArray(0)
                    vActualIndex += 1
                Else
                    If vArray(0).Split(vbNewLine)(0).ToString.StartsWith("""") Then
                        vArray(0) = Mid(vArray(0), 2).Replace("""""", "*_IDIDIDUNIQUEID_*")
    
                        If InStr(vArray(0), """" & vbNewLine) <> 0 Then
                            vActualArray(vActualIndex) = Mid(vArray(0), 1, InStr(vArray(0), """" & vbNewLine) + 1)
                            vArray(0) = Mid(vArray(0), InStr(vArray(0), """" & vbNewLine) + 3)
    
                            vActualArray(vActualIndex) = vActualArray(vActualIndex).ToString.Replace("*_IDIDIDUNIQUEID_*", """""")
                            vArray(0) = vArray(0).ToString.Replace("*_IDIDIDUNIQUEID_*", """""")
    
                            vActualIndex += 1
    
                            GoTo Skip_remove
                        End If
    
                        vArray(0) = vArray(0).ToString.Replace("*_IDIDIDUNIQUEID_*", """""")
                        vActualArray(vActualIndex) = vArray(0)
                        vActualIndex += 1
                    Else
                        vActualArray(vActualIndex) = vArray(0).Split(vbNewLine)(0)
                        vActualIndex += 1
    
                        vArray(0) = vArray(0).ToString.Substring(vArray(0).Split(vbNewLine)(0).ToString.Length + 2)
                        GoTo Skip_remove
                    End If
                End If
    
                vArray.RemoveAt(0)
    

    '这是VB代码中的标签 Skip_remove:

                If vActualIndex >= vMaxColumns Then
                    vNewArray.Add(vActualArray)
    
                    ReDim vActualArray(vMaxColumns - 1)
    
                    vActualIndex = 0
                End If
            Loop
        Catch ex As Exception
            Return ""
        End Try
    End Function