我的网页上有一个奇怪的问题,特别是一个文本区域元素,可以从用户那里获取剪贴板。
用户执行CTRL + V;我创建了一个事件来获取事件KeyUp的数据。
......这很好......
但是,当我试图划分这个文本区域的每个“行”时;开始问题...... 输入可以是这样的例子:
数据类似于:
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行...
有人知道任何解决方案或替代方式吗?
答案 0 :(得分:0)
您将获得包含三行的文本,将其拆分为换行符并获取包含三个项目的数组。好像它有效。 :)现在,您需要做的是,将每个项目分开并在选项卡上分割(= \t
)
[编辑]
不,现在我明白了你的意思。你不会通过使用这种分裂来到达那里。你必须解析字符串。字段值可以包含一个输入,在这种情况下,它将用双引号括起来。所以你必须解析字符串,当你仍在一组引号中时,不要将其拆分。
答案 1 :(得分:0)
关于'。'的问题不匹配换行符,在JS中执行该操作的标准方法是[\S\s]
,它将匹配任何内容。
看起来你想为初学者做的就是用标签分割字符串,对吧?然后...
result = string.split(/\t/)
然后你将有一个数组,每个行的数据是分开的。请注意,这仅适用于您的数据中不能包含额外错误标签的情况。
无论什么工具将信息放入剪贴板,都应该在JS复制并解析之前进行一些转义。如果它不能做到这一点,那么真的有什么事情 - 在这种情况下你不能保证你的字符串不会有双引号,制表符或你可能试图用作分隔符的任何其他字符。
答案 2 :(得分:0)
好吧,我找不到使用正则表达式或javascript方法的方法(我相信可以做到)。我以不同的方式分割信息。
我使用AJAX将此信息发送到服务器并在VB中执行拆分。 简历中:
我获得了最大列(按标签分割)。
获取并评估选项卡数组的每个值。
如果以双引号开头,尝试查找双引号的结尾(在此之前,用唯一文本替换中间双引号)
每次评估原始数组的项目时,我都删除了每个项目(始终评估项目0)...
如果找到一个新行(行的最后一行),则只删除上一行“最后一列”的文本。
我希望能帮助遇到同样问题的人。欢呼声。
以下是代码:
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